我想计算系统被停用的持续时间的百分比。 激活在“活动”列中给出,其中1表示激活,0表示取消激活。观测值(行)对应于来自不同系统的“ ID”标识的不同读数。每个读数的“时间”以时间戳标识。 这是我详细介绍的数据示例。
ID Timestamp Active
64 1512743947 1
74 1512743963 1
76 1512743978 1
80 1512743992 0
22 1512744041 1
74 1512744155 1
80 1512744175 1
51 1512744240 1
80 1512744266 0
80 1512744275 1
我在这里回答了我的问题:Extract change duration in R。但是我发现,时间戳记差的总和不会使我到达想要的位置。明确地说,作为回应,我希望停用每个ID所花费的总时间百分比,即介于0和1(不是1和0)之间。
ID Percentage
80 67%
答案 0 :(得分:1)
您可以尝试:
library(dplyr)
df %>%
group_by(ID) %>%
filter(n_distinct(Active) > 1) %>%
mutate(time_diff = lead(Timestamp) - Timestamp) %>%
summarise(
Percentage = scales::percent(sum(time_diff[Active == 0], na.rm = T) / sum(time_diff, na.rm = T))
)
输出:
# A tibble: 1 x 2
ID Percentage
<int> <chr>
1 80 67.8%
根据您的输出,我假设您要过滤掉100%或0%的情况。
否则,您可以这样做:
df %>%
group_by(ID) %>%
mutate(time_diff = lead(Timestamp) - Timestamp) %>%
mutate(
Percentage = sum(time_diff[Active == 0], na.rm = T) / sum(time_diff, na.rm = T),
Percentage = scales::percent(coalesce(Percentage, +(Active == 0) * 1))
) %>%
distinct(ID, Percentage)
输出:
# A tibble: 6 x 2
# Groups: ID [6]
ID Percentage
<int> <chr>
1 64 0%
2 74 0%
3 76 0%
4 80 67.8%
5 22 0%
6 51 0%