我希望在下面的 DF1
中添加另一列,该列返回相关国家在观察年份的人口。即,当国家和年份与 DF2
匹配时,人口将添加到 DF2
的列中。之前用merge
只匹配一个变量,有没有办法完成两个变量的匹配?
DF1:
eventid |iyear | imonth| iday | CountryTxt
1.97000e+1 |1970 | 7| 2 | Albania
1.97000e+11| 1970| 0| 0 | United Kingdom
1.97001e+11| 1984| 1| 0 | Somalia
1.97001e+11| 1990| 1| 0 | France
1.97001e+11| 1991| 1| 0 | New Zealand
DF2:
Country.Name|Code|Year|Population
Aruba |ABW |1960| 123
Afganistan |AFG |1970| 456
Albania |ALB |1970| 1000
France |FRA |1990| 5000
答案 0 :(得分:0)
这完全在 merge()
的能力范围之内:注意 ?merge
引用中所有强调的词,它们是复数,即该函数可以处理多个匹配的列...>
<块引用>
by、by.x、by.y:用于合并的列的规范。看 “详细信息”。
...
默认情况下,数据框在列与名称合并 它们都有,但是列的单独规范可以 由“by.x”和“by.y”给出。两个数据框中的行 提取指定列上的匹配
merge(df1,df2,
by.x=c("iyear","CountryTxt"),
by.y=c("Year","Country.Name"))
iyear CountryTxt eventid imonth iday Code Population
1 1970 Albania 1.97000e+01 7 2 ALB 1000
2 1990 France 1.97001e+11 1 0 FRA 5000
df1 <- read.table(header=TRUE,sep="|", strip.white=TRUE, text="
eventid |iyear | imonth| iday | CountryTxt
1.97000e+1 |1970 | 7| 2 | Albania
1.97000e+11| 1970| 0| 0 | United Kingdom
1.97001e+11| 1984| 1| 0 | Somalia
1.97001e+11| 1990| 1| 0 | France
1.97001e+11| 1991| 1| 0 | New Zealand
")
df2 <- read.table(header=TRUE,sep="|", strip.white=TRUE, text="
Country.Name|Code|Year|Population
Aruba |ABW |1960| 123
Afganistan |AFG |1970| 456
Albania |ALB |1970| 1000
France |FRA |1990| 5000
")