首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cumsum基于列的条件,更改条件再次开始cumsum

Cumsum基于列的条件,更改条件再次开始cumsum
EN

Stack Overflow用户
提问于 2021-03-10 17:45:03
回答 3查看 32关注 0票数 0

我有这个数据集,我想根据状态找到difftime的累积和,所需的输出是“outputcumsum”

代码语言:javascript
复制
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

我试过了,但没用

代码语言:javascript
复制
Data%>%
group_by(Status)%>%
summarise(outputcumsum=cumsum(difftime))

它给了我这个而不是我想要的

代码语言:javascript
复制
    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

你知道有什么解决方案吗?

EN

回答 3

Stack Overflow用户

发布于 2021-03-10 19:18:02

您可以使用base R的rle(),如下所示

代码语言:javascript
复制
Data$outputcumsum <- ave(Data$difftime, with(rle(Data$Status), rep(1:length(values), lengths)) , FUN = cumsum)
票数 1
EN

Stack Overflow用户

发布于 2021-03-10 17:49:05

group_by中使用data.table中的rleid

代码语言:javascript
复制
library(dplyr)
library(data.table)

Data%>%
  group_by(grp = rleid(Status)) %>%
  mutate(outputcumsum = cumsum(difftime))

或者在data.table中做所有的事情。

代码语言:javascript
复制
library(data.table)
setDT(Data)[, outputcumsum := cumsum(difftime), rleid(Status)]
票数 0
EN

Stack Overflow用户

发布于 2021-03-11 00:35:39

dplyr的一个选项

代码语言:javascript
复制
library(dplyr)
Data %>%
    group_by(grp = with(rle(Status), rep(seq_along(values), lengths))) %>%
    mutate(outputcumsum = cumsum(difftime))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66562081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档