gpt4 book ai didi

r - 计算每个日期的唯一事件数和时间总和

转载 作者:行者123 更新时间:2023-12-05 02:36:46 25 4
gpt4 key购买 nike

我有一个大型数据集,如下所示。

Date Time PeopleExposed
11/1 1PM 1
11/1 3PM 0
11/2 1PM 5
11/2 4PM 10
11/2 6PM 3
11/2 7PM 0
11/2 8PM 2
11/2 9PM 0
11/3 3PM 5
11/3 6PM 0

PeopleExposed 表示接触化学品的人数。因此,从 0 到正数表示接触事件发生,然后回到 0 表示它已经结束。

我如何计算每一天唯一“事件”和“接触人时”的总数?

所以对于 # 个“事件”,11 月 1 日有 1 个,11 月 2 日有 2 个,11 月 3 日有 1 个。

对于“人时”:
事件 #1,11 月 1 日:1P 暴露 2 小时(下午 1 点到下午 3 点):2 人时。
事件 #1,11/2:5P 暴露 3 小时,然后 10P 暴露 2 小时,然后 3P 暴露 1 小时:38 人时。
事件 #2,11/2:2P 暴露 1 小时:2 人时。
事件 #1,11/3:5P 暴露 3 小时:15 人时

我想用data.table或者dplyr返回:

Date NumEvents  PeopleHoursTotal
11/1 1 2
11/2 2 40
11/3 1 15

Date EventNum  PeopleHoursTotal TimeStart TimeEnd
11/1 1 2 1PM 3PM
11/2 1 38 1PM 7PM
11/2 2 2 8PM 8PM
11/3 1 15 3PM 6PM

我一直在创建指标变量来为事件的开始和结束创建指标变量列,但不确定之后要做什么。

最佳答案

你可以试试

library(dplyr)
library(lubridate)

df2 <- df %>%
mutate(time = parse_date_time(Time, "%I %p")) %>%
group_by(Date) %>%
mutate(EventNum = lag(cumsum(PeopleExposed == 0)) %>% replace_na(., 0) + 1,
difftime = as.numeric(lead(time) - time)) %>%
ungroup
df2 %>%
group_by(Date) %>%
summarise(NumEvents = length(unique(EventNum)),
PeopleHoursTotal = sum(PeopleExposed * difftime, na.rm = T))

Date NumEvents PeopleHoursTotal
<chr> <int> <dbl>
1 11/1 1 2
2 11/2 2 40
3 11/3 1 15

df2 %>%
group_by(Date, EventNum) %>%
summarise(PeopleHoursTotal = sum(PeopleExposed * difftime, na.rm = T),
TimeStart = first(Time),
TimeEnd = last(Time))

Date EventNum PeopleHoursTotal TimeStart TimeEnd
<chr> <dbl> <dbl> <chr> <chr>
1 11/1 1 2 1PM 3PM
2 11/2 1 38 1PM 7PM
3 11/2 2 2 8PM 9PM
4 11/3 1 15 3PM 6PM

关于r - 计算每个日期的唯一事件数和时间总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70179635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com