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日创建