首页 > 解决方案 > 当两个变量与第二个 DF 匹配时,将列添加到 DF

问题描述

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

标签: rdataframemergelookup

解决方案


这完全在 的能力范围内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
")


推荐阅读