将不同的值(按组)添加到R

时间:2019-06-13 22:05:14

标签: r dataframe grouping

我有两个数据框,如果一个数据框的值与另一列的值相等,我想将一个数据框的列的值减去另一个数据框的值。

我有两个类似于以下内容的数据框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$Col2A$Col2的标记匹配,我希望能够添加值[B]并创建一个列表,其结果的长度将与{中的行{1}}

我已经尝试过此代码

[A]

这似乎可行,但出现以下警告:

  

较长的对象长度不是较短的对象长度的倍数

2 个答案:

答案 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