【问题标题】:How to add elements of columns shared between two dataframes in R如何添加在R中的两个数据框之间共享的列元素
【发布时间】:2017-03-19 23:26:44
【问题描述】:

我有两个数据框:

数据帧 #1

A   B   C   D   E 
2   1   0   5   7       

数据框 #2

C   E   F   G 
3   1   0   9

我想合并这两个数据框,使第一个数据框作为参考,并将共同的列添加在一起

解决方案应如下所示:

A   B   C   D   E 
2   1   3   5   8

请注意,共享列(列 C 和 E)的元素已添加,而 Dataframe #2 中的额外列(列 F 和 G)被忽略,因为在 Dataframe #1 中找不到它们。每个 Dataframe 都有一行。

我尝试使用 R 中的本机函数以及合并包来完成此操作,但我没有运气。在我的应用程序中,我需要组合数千列,其中许多列在两个数据帧之间共享,因此我正在开发一个强大的解决方案。

谢谢!

【问题讨论】:

标签: r merge match


【解决方案1】:

这应该可行:

overlap = intersect(names(df1), names(df2))
df1[overlap] = df1[overlap] + df2[overlap]

假设数据帧中​​的行数在每个数据帧中是相同的。

【讨论】:

    【解决方案2】:

    先从宽格式转换为长格式可能更容易,执行操作然后再转换回来。例如,使用dplyrtidyr

    library(dplyr)
    library(tidyr)
    df1 <- data.frame(A = 2, B = 1, C = 0, D = 5, E = 7)
    df2 <- data.frame(C = 3, E = 1, F = 0, G = 9)
    
    df1 %>%
      gather(variable, value) %>%
      left_join(gather(df2, variable, value), by = "variable") %>%
      rowwise() %>%
      mutate(sum = sum(value.x, value.y, na.rm = TRUE)) %>%
      select(variable, sum) %>%
      spread(variable, sum)
    

    这是做什么的:将 df1 中的变量放入 1 列,将它们的值放入另一列;对df2做同样的事情;使用 df1 作为参考组合 df1 和 df2;对每个变量的值求和;选择变量列和新值(总和);转换回宽格式。

    结果:

    # A tibble: 1 × 5
          A     B     C     D     E
    * <dbl> <dbl> <dbl> <dbl> <dbl>
    1     2     1     3     5     8
    

    一般来说,当您对多列中的多个变量进行相同的测量时,值得考虑的是长格式是否能更好地表示数据。

    【讨论】:

    • 所以您投票决定将问题作为重复问题结束,然后发布答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多