【问题标题】:Cumulative values for columns based on previous row [duplicate]基于前一行的列的累积值[重复]
【发布时间】:2020-05-07 13:09:40
【问题描述】:

假设我需要根据同一行中的其他列以及同一列但前一行的值计算累积值。示例:根据时间间隔获取累计时间。

> data <- data.frame(interval=runif(10),time=0)
> data
     interval time
1  0.95197753    0
2  0.73623490    0
3  0.63938696    0
4  0.32085833    0
5  0.92621764    0
6  0.02801951    0
7  0.09071334    0
8  0.60624511    0
9  0.35364178    0
10 0.79759991    0

我可以使用下面的(丑陋的)代码生成时间的累积值:

for( i in 1:nrow(data)){
    data[i,"time"] <- data[i,"interval"] + ifelse(i==1,0,data[i-1,"time"])
}

> data
     interval      time
1  0.95197753 0.9519775
2  0.73623490 1.6882124
3  0.63938696 2.3275994
4  0.32085833 2.6484577
5  0.92621764 3.5746754
6  0.02801951 3.6026949
7  0.09071334 3.6934082
8  0.60624511 4.2996533
9  0.35364178 4.6532951
10 0.79759991 5.4508950

是否可以在没有for 迭代的情况下使用单个命令来执行此操作?

【问题讨论】:

标签: r


【解决方案1】:

也许你正在寻找的是 cumsum():

library(tidyverse)
data <- data %>%
  mutate(time = cumsum(interval))

【讨论】:

    【解决方案2】:

    正如 Ronak 所说,您也可以使用 dplyr 和管道来执行此操作:

    library(dplyr)
    data <- data %>%
      mutate(time = cumsum(interval))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多