r - 从两个数据框的列中匹配和提取值
问题描述
我想匹配两个数据框中两列的值并添加第三列,最好查看数据框:
FromA <- c("a", "b", "d")
ToA <- c("a", "k", "h")
PAC<- c("red", "blue", "black")
df1 <- data.frame(FromA, ToA, PAC)
> df1
FromA ToA PAC
1 a a red
2 b k blue
3 d h black
FromB<- c("a", "b", "f")
ToB <- c("a", "k", "h")
df2<- data.frame(FromB, ToB)
> df2
FromB ToB
1 a a
2 b k
3 f h
df1$PAC
如果两个第一列的值匹配,我希望第二个数据框获得 的值。最终结果:
> DF2
FromB ToB PAC
1 a a red
2 b k blue
3 f h NA
所以,我使用了 sapply()
df2$PAC<- sapply(1:nrow(df2), function(i)
df1$PAC[df1$FromA==df2$FromB[i] & df1$ToA == df2$ToB[i] ])
如果两列完全匹配,该函数将起作用,否则,它会给我一个错误。
你能帮我理解我错过了什么吗?我会很感激的。
解决方案
您可以简单地使用该merge
功能:
merge(df1, df2, by.x = c("FromA", "ToA"), by.y = c("FromB", "ToB"), all.y = T)
推荐阅读
- node.js - nodejs更改从另一个类继承的类的继承
- css - css变量的赋值单位
- java - 随机数组生成
- r - r:随机替换一定数量的缺失值
- reactjs - 如何等到测试库中按钮的禁用状态发生更改?
- python - 聚合和自定义函数 pandas
- java - 使用 JDK 1.8 编译期间出现“调用 com.sun.tools.ws.wscompile.WsimportTool 失败”错误
- python - 大熊猫在垂直连接后得到原始数据框
- java - 两种方式的 SSL 身份验证问题:HTTP 500 - 对等方终止 Hadoop | 套接字写入错误 | PKCS12
- python - 使用 cv2 将 video.mp4(小尺寸)转换为图像序列(统称为更大尺寸)时的尺寸差异