r - R:根据另一个数据集中的几个变量填写一个新列
问题描述
我有一个包含 4 列(ID、Year、X 和 Y)的第一个数据框
Id Year X Y
1 2017 20_24
1 2016 45_49
2 2017 30_34
2 2014 20_24
4 2014 14_19
4 2015 20_24
我想使用另一个数据集填写 Y 列。第二个数据集得到相同的变量 ID 和年份,其他列是第一个数据集中 X 列的项目。
Id Year 14_19 20_24 30_34 45_49
1 2017 123 122 5555 4444
1 2016 456 543 8888 333
1 2015 5644 0908 0987 5456
1 2014 5642 767 233 323
2 2017 123 123 5666 989
2 2016 456 876 55 45
2 2015 786 789 324 77
2 2014 633 543 334 34
3 2017 123 123 321 44
3 2016 456 345 45645 23
3 2015 876 4556 6554 23
因此,当 X 变量的 ID、年份和项目与第二个数据集的列匹配时,我希望填写 Y。这怎么可能?谢谢 !
解决方案
试试这个dplyr
和tidyr
解决方案:
library(dplyr)
library(tidyr)
result <- df2 %>%
gather("X", "Y", -c("ID", "Year")) %>%
right_join(df1, by = c("ID", "Year", "X"))
或使用pivot_longer()
result <- df2 %>%
pivot_longer(cols = 3:4,
names_to = "X",
values_to = "Y") %>%
right_join(df1, by = c("ID", "Year", "X"))
推荐阅读
- ios - 无法执行存储在 Array[Any] 中的对象的方法
- mysql - 检查 docker-compose up 并且 db 已经启动
- javascript - 未捕获的错误:在窗口上找不到物化对象
- opencart - 尝试在扩展中获取模块列表时,为什么会收到 500(内部服务器错误)?
- java - 来自接口的 Java 类型推断
- r - h2o 中的分类编码 - 测试集
- java - 从两个列表的组合中形成新的小列表
- javascript - HTML5 Geolocation API 在 Firefox 中不起作用
- c++ - 释放 COM 指针的异常
- sql-server - Transact-SQL:使用表 2 中的可选连接属性连接两个表