r - 当两个变量与第二个 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
解决方案
这完全在 的能力范围内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
")
推荐阅读
- airflow - 如何屏蔽 Airflow 日志中的凭据?
- php - 在特定日期销售特定 Woocommerce 商品,在特定时间范围内销售其他商品
- sql - SQL查询3列,计数1并仅分组另一列
- python - 如何将 xarray MFdataset 转换为多个 geotiff?尝试了两种方法,到目前为止都失败了
- python - Playbook getting stuck when non-OS Python Interpreter is enforced on managed node
- javascript - 将参数传递给forEach循环内的回调函数?
- azure-devops - 我可以让 Teamcity 构建触发 Azure Devops 构建作业吗?
- java - Java InetAddress.getByName & /etc/hosts
- laravel-5 - 如何将一个控制器中的函数调用到laravel中的另一个控制器
- wso2 - 如何使用 wso2 数据映射器映射 xml 属性?