【问题标题】:How to append a vector to a list of data.frames?如何将向量附加到 data.frames 列表中?
【发布时间】:2017-06-29 07:41:17
【问题描述】:

如何将矢量绑定/附加到 data.frames 列表中?

l <- list(data.frame(a=c(1,2,3), b=c(1,2,3)), data.frame(a=c(1,2,3,4), b=c(1,2,3,4)))
l
file_name <- c("myfile.txt", "yourfile.txt")
file_name

我试过了:

lapply(l, function(x) cbind(l[[x]], fname = rep(file_name, each = nrow(l[[x]]))))

但我得到一个错误:

l[[x]] 中的错误:无效的下标类型“列表”

【问题讨论】:

    标签: r list lapply sapply


    【解决方案1】:

    我们可以使用Mapcreate a new column 'fname' for each of thelist` 元素通过附加相应的'file_name' 到它

    Map(cbind, l, fname = file_name)
    

    如果我们使用lapply,则循环遍历list的序列

    lapply(seq_along(l), function(i) transform(l[[i]], fname = file_name[i]))
    

    【讨论】:

      【解决方案2】:

      只是为了确保..您有以下 data.frames 列表..

      l <- list(data.frame(a=c(1,2,3), b=c(1,2,3)), data.frame(a=c(1,2,3,4), b=c(1,2,3,4)))
      l
      [[1]]
        a b
      1 1 1
      2 2 2
      3 3 3
      
      [[2]]
        a b
      1 1 1
      2 2 2
      3 3 3
      4 4 4
      

      您最终希望将一个向量(每个列表不同)绑定到列表中的所有 data.frames.. 所以您想要拥有

      [[1]]
        a b v
      1 1 1 a
      2 2 2 b
      3 3 3 c
      
      [[2]]
        a b v
      1 1 1 a
      2 2 2 b 
      3 3 3 c
      4 4 4 d
      

      我们可以做的一个技巧是首先使用 rbindlist 将所有帧放在一起......并保留它们的 id

      L = rbindlist(l,idcol = TRUE)
      

      假设我们还有一个想要附加到每个 data.frame 的列表

      v = list(data.frame(v = letters[1:3]), data.frame(v = LETTERS[1:4]))
      V = rbindlist(v)
      

      现在我们可以做一个简单的 cbind,然后使用我们创建的 .id 拆分列表

      result = cbind(L,V)
      final_result = split(result,on = ".id")
      
          $`1`
         .id a b v
      1:   1 1 1 a
      2:   1 2 2 b
      3:   1 3 3 c
      
      $`2`
         .id a b v
      1:   2 1 1 A
      2:   2 2 2 B
      3:   2 3 3 C
      4:   2 4 4 D
      

      我们仍然有一个 .id 列..但是摆脱那个不应该太麻烦..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-31
        • 2015-05-11
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多