如何从R中的两个不同数据帧中添加两列,其中一列只是另一列的唯一值的子集

卡尔提克S

我有两个数据帧,我需要从这两个数据帧中添加两列,并将结果存储在原始的较大数据帧中,但是较大的数据帧比较小的数据帧具有更多的“分支”列。我尝试使用匹配,但不匹配的分支总和为NA

样例代码:

> df1 <- data.frame(branch = letters[seq(1,5)],
+                   rev = seq(10,50,10),
+                   stringsAsFactors = 0)
> df1
  branch rev
1      a  10
2      b  20
3      c  30
4      d  40
5      e  50
> 
> df2 <- data.frame(branch = c('b','d'),
+                   Amt = c(10,10),
+                   stringsAsFactors = 0)
> df2
  branch Amt
1      b  10
2      d  10
> 
> df1$rev + df2[match(df1$branch,df2$branch),2,drop = 1]
[1] NA 30 NA 50 NA
> 

预期产量

> df1
  branch rev
1      a  10
2      b  30
3      c  30
4      d  50
5      e  50
> 

我尝试使用左联接,如下所示:

> left_join(df1, df2, by = 'branch')
  branch rev Amt
1      a  10  NA
2      b  20  10
3      c  30  NA
4      d  40  10
5      e  50  NA
> df1 <- left_join(df1, df2, by = 'branch')
> df1[is.na(df1)] <- 0
> df1
  branch rev Amt
1      a  10   0
2      b  20  10
3      c  30   0
4      d  40  10
5      e  50   0
> df1$rev <- df1$rev + df1$Amt
> df1
  branch rev Amt
1      a  10   0
2      b  30  10
3      c  30   0
4      d  50  10
5      e  50   0
> df1$Amt <- NULL
> df1
  branch rev
1      a  10
2      b  30
3      c  30
4      d  50
5      e  50
> 

有人可以让我知道是否有一个更简单的解决方案。

罗纳克·沙

一种方法是将的输出存储match在变量中,设置replace NA为0,然后添加值

vals <- df2$Amt[match(df1$branch,df2$branch)]
df1$rev + replace(vals, is.na(vals), 0)
#[1] 10 30 30 50 50

类似的dplyrleft_join代替match

library(dplyr)

df1 %>%
  left_join(df2, by = 'branch') %>%
  mutate(Amt = replace(Amt, is.na(Amt), 0), 
         rev  = rev + Amt) %>%
  select(names(df1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

添加一个新列,其中包含数据帧的另一列的每个两个行之间的差异

来自分类Dev

比较两个表,其中一列匹配而另一列不匹配

来自分类Dev

如何串联两个列值并存储在另一列中mysql php

来自分类Dev

比较一列中的值是否在另一列中的两个值之间python pandas

来自分类Dev

在一列中基于两个值对数据框进行子集

来自分类Dev

熊猫基于一个表中的一列合并两个数据帧,该数据框位于另一表中的两列之间

来自分类Dev

比较两个数据帧中一列的不同值

来自分类Dev

在一列中匹配两个数据帧,并从R中另一列中的匹配行中减去

来自分类Dev

如何计算熊猫数据帧中一列中两个重复值之间的单元格(例如索引)距离?

来自分类Dev

如果来自一列的数据存在于另一列中,则合并两个数据帧

来自分类Dev

如何通过将另一列中的两个值分组为两个值来添加两列值

来自分类Dev

比较两个数据帧中的两列以及另一列的条件

来自分类Dev

仅在pandas数据框中旋转两列并添加其中一列

来自分类Dev

一列中两个不同条件的总和

来自分类Dev

根据另一列中的值比较一列中的两个值

来自分类Dev

显示两列,但其中一列与SQL Server中另一个表中的另一列合并

来自分类Dev

用另一列r中的两个条件来替换一列

来自分类Dev

如何基于另一列的两个连续值在pandas的新列中添加标签?

来自分类Dev

SQL:两列的唯一索引,其中一列的值不是默认值

来自分类Dev

如何减去两个列值并在Java中的另一列中显示

来自分类Dev

如何串联两个列值并存储在另一列中mysql php

来自分类Dev

MySQL查询以查找一个表中一列的值是否在另一表中两列的两个值之间

来自分类Dev

通过两个文件中另一列中的相应值聚合一列中的值

来自分类Dev

如何从 SQL 连接中的同一列返回两个不同的值?

来自分类Dev

SQL-如何在一列和两个结果中获取两个不同列的值?

来自分类Dev

如何在 MySQL 中获取同一列的两个不同值

来自分类Dev

如何从 SQL 中的表中选择其中一列中的元素仅包含另一列的一个特征,而另一列本身又包含两个特征?

来自分类Dev

来自两个表中两列的 Android Sum Quantity 值,并使用求和值更新其中一列中的 Quantity 值

来自分类Dev

从两个表中选择但仅针对其中一列中的最大值

Related 相关文章

  1. 1

    添加一个新列,其中包含数据帧的另一列的每个两个行之间的差异

  2. 2

    比较两个表,其中一列匹配而另一列不匹配

  3. 3

    如何串联两个列值并存储在另一列中mysql php

  4. 4

    比较一列中的值是否在另一列中的两个值之间python pandas

  5. 5

    在一列中基于两个值对数据框进行子集

  6. 6

    熊猫基于一个表中的一列合并两个数据帧,该数据框位于另一表中的两列之间

  7. 7

    比较两个数据帧中一列的不同值

  8. 8

    在一列中匹配两个数据帧,并从R中另一列中的匹配行中减去

  9. 9

    如何计算熊猫数据帧中一列中两个重复值之间的单元格(例如索引)距离?

  10. 10

    如果来自一列的数据存在于另一列中,则合并两个数据帧

  11. 11

    如何通过将另一列中的两个值分组为两个值来添加两列值

  12. 12

    比较两个数据帧中的两列以及另一列的条件

  13. 13

    仅在pandas数据框中旋转两列并添加其中一列

  14. 14

    一列中两个不同条件的总和

  15. 15

    根据另一列中的值比较一列中的两个值

  16. 16

    显示两列,但其中一列与SQL Server中另一个表中的另一列合并

  17. 17

    用另一列r中的两个条件来替换一列

  18. 18

    如何基于另一列的两个连续值在pandas的新列中添加标签?

  19. 19

    SQL:两列的唯一索引,其中一列的值不是默认值

  20. 20

    如何减去两个列值并在Java中的另一列中显示

  21. 21

    如何串联两个列值并存储在另一列中mysql php

  22. 22

    MySQL查询以查找一个表中一列的值是否在另一表中两列的两个值之间

  23. 23

    通过两个文件中另一列中的相应值聚合一列中的值

  24. 24

    如何从 SQL 连接中的同一列返回两个不同的值?

  25. 25

    SQL-如何在一列和两个结果中获取两个不同列的值?

  26. 26

    如何在 MySQL 中获取同一列的两个不同值

  27. 27

    如何从 SQL 中的表中选择其中一列中的元素仅包含另一列的一个特征,而另一列本身又包含两个特征?

  28. 28

    来自两个表中两列的 Android Sum Quantity 值,并使用求和值更新其中一列中的 Quantity 值

  29. 29

    从两个表中选择但仅针对其中一列中的最大值

热门标签

归档