R 计算总运行时间

R 计算总运行时间,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有以下数据: 库(dplyr,warn.conflicts=FALSE) df#A tible:6 x 2 #>x相 #> #>130第一期 #>260第一期 #>390第一期 #>430第二阶段 #>560第二阶段 #>690第二阶段 由(v0.3.0)于2020年8月11日创建 其中,x是每个阶段内经过的时间(以秒为单位)。由于阶段是连续发生的,因此我对计算总运行时间感兴趣 所需输出: #>#tible:6 x 3 #>x相位经过时间 #> #>1

我有以下数据:

库(dplyr,warn.conflicts=FALSE)
df#A tible:6 x 2
#>x相
#>      
#>130第一期
#>260第一期
#>390第一期
#>430第二阶段
#>560第二阶段
#>690第二阶段
由(v0.3.0)于2020年8月11日创建

其中,
x
是每个
阶段内经过的时间(以秒为单位)。由于
阶段
是连续发生的,因此我对计算总运行时间感兴趣

所需输出:

#>#tible:6 x 3
#>x相位经过时间
#>              
#>130第130期
#>2 60第1阶段60
#>390第190期
#>4 30第2阶段120
#>560第2期150
#>690第2期180

有什么想法吗?请注意,我的真实示例有更多的阶段。

这里是一个通过
dplyr
实现的想法。首先,我们需要按
阶段进行分组,并获得每个阶段的时间差。然后,我们将
ungroup()
并将
cumsum()
作为一个总数,即

library(dplyr)

df %>% 
 group_by(phase) %>% 
 mutate(diffs = x - lag(x, default = 0)) %>% 
 ungroup() %>% 
 mutate(res = cumsum(diffs)) %>% 
 select(-diffs)

# A tibble: 6 x 3
#      x phase     res
#  <dbl> <chr>   <dbl>
#1    30 phase 1    30
#2    60 phase 1    60
#3    90 phase 1    90
#4    30 phase 2   120
#5    60 phase 2   150
#6    90 phase 2   180
库(dplyr)
df%>%
分组单位(阶段)%>%
变异(差异=x-滞后(x,默认值=0))%>%
解组()%>%
突变(res=cumsum(diff))%>%
选择(-diff)
#一个tibble:6x3
#x相位分辨率
#      
#130第130期
#2 60第1阶段60
#390第190期
#4 30第2阶段120
#560第2期150
#690第2期180

我相信下面的帖子有你想要的答案:


它显示了如何使用
groupby
mutate
创建累积列。您似乎希望在两个阶段中计算所用时间的总和,因此不要在代码中包含
groupby
调用。

这里是另一个
dplyr
解决方案。它找到每个阶段的开始,并将其添加到x

库(tidyverse)
df%分组单位(相位)%>%
嵌套()%>%
突变(开始=map_dbl(数据,最大值))%>%
解组()%>%
突变(开始=滞后(开始,默认值=0))%>%
unnest(数据)%%>%
变异(经过的时间=开始+x)%>%
选择(-start)
#>#tibble:6 x 3
#>相位x经过的时间
#>              
#>1第1阶段30 30
#>2第一期60 60
#>三期第一期90
#>4第二阶段30 120
#>5第二阶段60 150
#>6第2阶段90 180
由(v0.3.0)于2020年8月11日创建