【问题标题】:Append a new column using the name of dataframe from list of dataframe in R [duplicate]使用R中数据框列表中的数据框名称附加一个新列[重复]
【发布时间】:2021-10-04 21:54:03
【问题描述】:

给定数据框列表l,如下所示:

l <- list(a = data.frame(a_1 = c(11, 12),
                        a_2 = c(13, 14)),
          b = data.frame(b_1 = c(21, 22),
                        b_2 = c(23, 24)),
          c = data.frame(c_1 = c(31, 32),
                          c_2 = c(33, 34)))
print(l)

输出:

现在我想使用每个数据框的名称添加一个新列 new_col

l[['a']]$new_col = 'a'
l[['b']]$new_col = 'b'
l[['c']]$new_col = 'c'

我想知道如何使用names(l) 自动为每个数据框附加列,即[1] "a" "b" "c"?谢谢。

最终的结果会是这样的:

【问题讨论】:

    标签: r dataframe dplyr plyr


    【解决方案1】:

    方法一:使用map2的tidyverse解决方案

    library(tidyverse)
    map2(l, names(l), ~ mutate(.x, new_col = .y))
    

    输出:

    $a
      a_1 a_2 new_col
    1  11  13       a
    2  12  14       a
    
    $b
      b_1 b_2 new_col
    1  21  23       b
    2  22  24       b
    
    $c
      c_1 c_2 new_col
    1  31  33       c
    2  32  34       c
    

    方法二:for循环解决方案

    l 给出上述输出):

    for(i in 1:length(names(l))) {
      l[[i]]$new_col <- names(l)[i]
    }
    

    【讨论】:

    • 谢谢,它有效。是否可以使用for(i in l) {...}等for循环?
    • @ahbon 绝对:刚刚编辑了我的答案以添加一个 for 循环解决方案。 map2 做同样的事情,在我看来更干净,但使用你喜欢的任何一个。
    【解决方案2】:

    或者mapply():

    mapply(cbind, l, "new_col"=names(l), SIMPLIFY=F)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2017-10-17
      • 2018-01-04
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多