这很可能在其他地方有一个答案,但是我在表达问题的措辞以找到我需要的东西时遇到困难。
我有两个数据帧A和B,A的行比B多得多。我想根据A的列从B查找值,并将其添加到A的另一列。 / p>
A$ColumnToAdd + B[ColumnToMatch == A$ColumnToMatch,]$ColumnToAdd
但是我得到了很多NA:
Warning in `==.default`: longer object length is not a multiple of shorter object length
我可以使用凌乱的for循环来做到这一点,但是我正在寻找更快,更优雅的东西。
谢谢
答案 0 :(得分:1)
如果我正确理解了您的问题,那么您正在寻找merge或join,如评论中的建议。
这是一个简单的示例,说明两者都使用了适合您描述的虚拟数据。
library(tidyverse)
# Some dummy data
ColumnToAdd <- c(1,1,1,1,1,1,1,1)
ColumnToMatch <- c('a','b','b','b','c','a','c','d')
A <- data.frame(ColumnToAdd, ColumnToMatch)
ColumnToAdd <- c(1,2,3,4)
ColumnToMatch <- c('a','b','c','d')
B <- data.frame(ColumnToAdd, ColumnToMatch)
# Example using merge
A %>%
merge(B, by = c("ColumnToMatch")) %>%
mutate(sum = ColumnToAdd.x + ColumnToAdd.y)
# Example using join
A %>%
inner_join(B, by = c("ColumnToMatch")) %>%
mutate(sum = ColumnToAdd.x + ColumnToAdd.y)
The advantages of the dplyr versions over merge are: