我有这个数据集,我想根据状态找到difftime的累积和,所需的输出是“outputcumsum”
x Status difftime outputcumsum
24/11/2020 15:59:22 A 0 0
24/11/2020 16:29:22 A 0.5 0.5
25/11/2020 08:02:36 B 15,5538888888889 15,5538888888889
26/11/2020 08:45:30 B 24,715 40,2688888889
26/11/2020 09:15:59 A 0,508055555555556 0,508055555555556
26/11/2020 09:45:59 A 0,5 1,00805555556我试过了,但没用
Data%>%
group_by(Status)%>%
summarise(outputcumsum=cumsum(difftime))它给了我这个而不是我想要的
x Status difftime outputcumsum
24/11/2020 15:59:22 A 0 0
24/11/2020 16:29:22 A 0.5 0.5
25/11/2020 08:02:36 B 15,5538888888889 15,5538888888889
26/11/2020 08:45:30 B 24,715 40,2688888889
26/11/2020 09:15:59 A 0,508055555555556 1,00805555556
26/11/2020 09:45:59 A 0,5 1,50805555556你知道有什么解决方案吗?
发布于 2021-03-10 19:18:02
您可以使用base R的rle(),如下所示
Data$outputcumsum <- ave(Data$difftime, with(rle(Data$Status), rep(1:length(values), lengths)) , FUN = cumsum)发布于 2021-03-10 17:49:05
在group_by中使用data.table中的rleid:
library(dplyr)
library(data.table)
Data%>%
group_by(grp = rleid(Status)) %>%
mutate(outputcumsum = cumsum(difftime))或者在data.table中做所有的事情。
library(data.table)
setDT(Data)[, outputcumsum := cumsum(difftime), rleid(Status)]发布于 2021-03-11 00:35:39
dplyr的一个选项
library(dplyr)
Data %>%
group_by(grp = with(rle(Status), rep(seq_along(values), lengths))) %>%
mutate(outputcumsum = cumsum(difftime))https://stackoverflow.com/questions/66562081
复制相似问题