gpt4 book ai didi

r - 为国家冲突年份观察创建新变量和新数据行

转载 作者:行者123 更新时间:2023-12-04 10:57:12 25 4
gpt4 key购买 nike

我对 R 非常陌生,仍在学习非常基础的知识,我还没有弄清楚如何执行这个特定的操作,但它会为我节省大量的劳动力和时间。

我有一个国际冲突数据集,其中国家和日期的列如下所示:

country     dates
Angola 1951-1953
Belize 1970-1972

我想重新组织数据以创建开始年份和结束年份的变量,并创建一个观察年份(称为“yrobs”)列,因此该集合看起来更像这样:

country     yrobs  yrstart     yrend
Angola 1951 1951 1953
Angola 1952 1951 1953
Angola 1953 1951 1953
Belize 1970 1970 1972
Belize 1971 1970 1972
Belize 1972 1970 1972

有人建议使用数据框和双 for 循环,但我在尝试时有点困惑。任何帮助将不胜感激,并且可以随意使用虚拟语言,因为我对这里的编程仍然很陌生。非常感谢。

最佳答案

这里不需要任何 for 循环。使用 R 的强大功能及其贡献的软件包,尤其是 plyr 和 reshape2。

library(reshape2)
library(plyr)

创建一些数据:

df <- data.frame(
country =c("Angola","Belize"),
dates = c("1951-1953", "1970-1972")
)

使用 reshape 包中的 colsplit 将日期列一分为二,并将其绑定(bind)到原始数​​据框。

df <- cbind(df, colsplit(df$date, "-", c("start", "end")))

现在是有趣的部分。使用包 plyr 中的 ddply 来拆分、应用和组合 (SAC)。这将采用 df 并将函数应用于国家/地区的每次更改。 ddply 内部的匿名函数创建了一个带有国家和观察值的小型 data.frame,关键是使用 seq() 生成从开始到结束日期的序列。 ddply 的强大之处在于它可以一步完成所有这些拆分、组合和应用。将其视为其他语言中的循环,但您不需要跟踪索引变量。

ddply(df, .(country), function(x){
data.frame(
country=x$country,
yrobs=seq(x$start, x$end),
yrstart=x$start,
yrend=x$end
)
}
)

结果:

  country yrobs yrstart yrend
1 Angola 1951 1951 1953
2 Angola 1952 1951 1953
3 Angola 1953 1951 1953
4 Belize 1970 1970 1972
5 Belize 1971 1970 1972
6 Belize 1972 1970 1972

关于r - 为国家冲突年份观察创建新变量和新数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com