当两个变量与第二个 DF 匹配时,将列添加到 DF

时间:2021-01-06 23:32:19

标签: r dataframe merge lookup

我希望在下面的 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

1 个答案:

答案 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
")

相关问题