我有两个数据框,如果一个数据框的值与另一列的值相等,我想将一个数据框的列的值减去另一个数据框的值。
我有两个类似于以下内容的数据框A和B:
[A]
Col1 Col2
1 cat
2 dog
3 bird
4 cat
5 dog
[B]
Col1 Col2
[cat] 1
[dog] 2
[bird] 3
如果A$Col1 + B$Col2
与A$Col2
的标记匹配,我希望能够添加值[B]
并创建一个列表,其结果的长度将与{中的行{1}}
我已经尝试过此代码
[A]
这似乎可行,但出现以下警告:
较长的对象长度不是较短的对象长度的倍数
答案 0 :(得分:0)
这是一个tidyverse
样式的示例,用于连接两个数据框并减去列。然后,您可以使用新列并将其转换为列表或所需的任何内容。
library(tidyverse)
A <- tibble(
Col1 = 1:5,
Col2 = c("cat", "dog", "bird", "cat", "dog")
)
B <- tibble(
Col1 = c("cat", "dog", "bird"),
Col2 = 1:3
)
A %>%
left_join(B, by = c("Col2" = "Col1")) %>%
mutate(Col3 = Col1 - Col2.y)
答案 1 :(得分:0)
使用Left_Join
,然后为差异创建一个新列。
merge(A, B, by.x = "Col2", by.y = "Col1", all.x = TRUE) %>% mutate(Difference = Col1 - Col2.y )
Col2 Col1 Col2.y Difference
1 bird 3 3 0
2 cat 1 1 0
3 cat 4 1 3
4 dog 2 2 0
5 dog 5 2 3