【问题标题】:Subtract rows then sum values减去行然后对值求和
【发布时间】:2017-12-05 20:55:14
【问题描述】:

我有这个数据框,我想在其中执行一些计算。

aa = c (1,3,1,0,0,1,6,1,14,3,0)
bb = c (0,0,5,0,0,1,6,0,2,15,1)
ee = rbind( aa,bb)
df = as.data.frame (ee)

首先我想从 aa 行中的第一个值中减去 bb 行中的第一个值 ... 1 - 0 ... 然后将结果添加到 aa 行中的第二个值 ... 1 + 3 = 4 ... 然后 4 - 0 ... 在 aa 中 4 + 1 = 5 等等 ...

期望的结果是:

cc = c (1,4,5,0,0,1,6,1,15,16,1)
ff = rbind( cc,bb)
df1 = as.data.frame(ff)

任何想法都非常感谢!

【问题讨论】:

    标签: r dataframe sum row subtraction


    【解决方案1】:

    您想要执行累积和的差异:

    cc <- cumsum(aa) - cumsum(c(0, bb[-length(bb)]))
    

    我在开头添加了一个 0 并删除了 bb 的最后一个元素。因为你想在第 i 个元素减去第 i 个 bb 之前的结果

    我测试一下:

    aa = c (1,3,1,0,0,1,6,1,14,3,0)
    bb = c (0,0,5,0,0,1,6,0,2,15,1)
    cc <- cumsum(aa) - cumsum(c(0, bb[-length(bb)]))
    cc
    [1]  1  4  5  0  0  1  6  1 15 16  1
    

    编辑: 另一种方法(感谢 lmo)是:

    cc <- cumsum(aa - c(0, head(bb, -1)))
    

    【讨论】:

    • 因为这些操作是关联和交换的,你也可以做cumsum(aa - c(0, head(bb, -1))),稍微简单一点。
    【解决方案2】:

    你可以这样做

    for(i in 1:10){
      aa[i+1] <- (aa[i] - bb[i]) + aa[i+1]
    }
    
    aa
    
    [1]  1  4  5  0  0  1  6  1 15 16  1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多