【问题标题】:R Subtracting columns within a listR减去列表中的列
【发布时间】:2017-11-16 15:34:38
【问题描述】:

我想减去列表中的特定列。我还在学习如何正确使用 apply 函数。例如,给定

> b <- list(data.frame(12:16, 3*2:6), data.frame(10:14, 2*1:5))
> b

[[1]]
  X12.16 X3...2.6
1     12        6
2     13        9
3     14       12
4     15       15
5     16       18

[[2]]
  X10.14 X2...1.5
1     10        2
2     11        4
3     12        6
4     13        8
5     14       10

我想要一些函数 x 以便我得到

> x(b)

[[1]]
  X12.16 X3...2.6  <newcol>
1     12        6         6
2     13        9         4
3     14       12         2
4     15       15         0
5     16       18        -2

[[2]]
  X10.14 X2...1.5  <newcol>
1     10        2         8
2     11        4         7
3     12        6         6
4     13        8         5
5     14       10         4

提前致谢。

【问题讨论】:

    标签: r list apply lapply subtraction


    【解决方案1】:

    如果您的 data.frames 具有良好且一致的名称,您可以使用 transformlapply

    b <- list(data.frame(a=12:16, b=3*2:6), data.frame(a=10:14, b=2*1:5))
    lapply(b, transform, c=a-b)
    

    【讨论】:

      【解决方案2】:

      这里有一个解决方案:

      lapply(b, function(x) {
        x[, 3] <- x[, 1] - x[, 2]
        x
      })
      
      [[1]]
        X12.16 X3...2.6 V3
      1     12        6  6
      2     13        9  4
      3     14       12  2
      4     15       15  0
      5     16       18 -2
      
      [[2]]
        X10.14 X2...1.5 V3
      1     10        2  8
      2     11        4  7
      3     12        6  6
      4     13        8  5
      5     14       10  4
      

      【讨论】:

        【解决方案3】:

        dplyr:

        library(dplyr)
        lapply(b, function(x) x %>% mutate(new_col = .[[1]]-.[[2]]))
        

        结果:

        [[1]]
          X12.16 X3...2.6 new_col
        1     12        6       6
        2     13        9       4
        3     14       12       2
        4     15       15       0
        5     16       18      -2
        
        [[2]]
          X10.14 X2...1.5 new_col
        1     10        2       8
        2     11        4       7
        3     12        6       6
        4     13        8       5
        5     14       10       4
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多