【问题标题】:Add corresponding columns of data frame in R在R中添加数据框的相应列
【发布时间】:2021-03-16 00:38:57
【问题描述】:

这是我的示例数据。

df1 <- tibble(a=1:4,
              b=1:4,
              c=1:4,
              d=1:4,
              e=1:4)

# A tibble: 4 x 5
      a     b     c     d     e
  <int> <int> <int> <int> <int>
1     1     1     1     1     1
2     2     2     2     2     2
3     3     3     3     3     3
4     4     4     4     4     4
df2 <- tibble(b=1:4,
              d=1:4,
              e=1:4)

      b     d     e
  <int> <int> <int>
1     1     1     1
2     2     2     2
3     3     3     3
4     4     4     4

我想添加共同的列,以便我可以得到这样的数据框

      a     b     c     d     e
  <int> <dbl> <int> <dbl> <dbl>
1     1     2     1     2     2
2     2     4     2     4     4
3     3     6     3     6     6
4     4     8     4     8     8

在 R 中,有没有一种简单的方法可以使用 dplyr 之类的工具来做到这一点?

【问题讨论】:

    标签: r dplyr data-cleaning data-wrangling


    【解决方案1】:

    一个更简单的选择是根据“df2”的列名对第一个数据集“df1”进行子集化(假设“df2”中的所有列都存在于“df1”中),将它们添加并分配回'df1'

    df1[names(df2)] <- df1[names(df2)] + df2
    

    或使用dplyr

    library(dplyr)
    df1 %>% 
        mutate(c_across(names(df2)) + df2)
    

    -输出

    # A tibble: 4 x 5
    #      a     b     c     d     e
    #  <int> <int> <int> <int> <int>
    #1     1     2     1     2     2
    #2     2     4     2     4     4
    #3     3     6     3     6     6
    #4     4     8     4     8     8
    

    【讨论】:

    • 谢谢!为什么我们使用c_across() 而不是across()?两者似乎都给出了相同的结果。
    • @max 你能改变'df2'列的数据并检查吗
    • 即使使用不同的数据,两个跨函数也会给出相同的结果。
    • @max 我认为这是由于相同的尺寸。
    • @max 另外,我不完全确定可接受的行为,因为每个版本中的一些 tidyverse 函数行为都会发生变化。我认为使用c_across 而不是across 更合适,因为across 类似于lapply
    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2014-12-28
    相关资源
    最近更新 更多