【发布时间】:2021-09-16 06:27:19
【问题描述】:
我想计算 R 中两个事件之间的时间(以分钟为单位),仅针对特定 id(例如 892530)以及事件“eventBegins”和第一个 human2 事件之间(或者,另一种方法写这将是human2的最短日期时间)。请注意,“日期时间”变量采用 POSIXct 格式。我似乎无法使用 dplyr 和 base R (min()) 的混合来做到这一点,并且想为解决方案挑选你的大脑。最后,我试图获取数据集中每个 id 的平均时间差。
这是使用代码dput(head(df, 30)) 生成的输出
:
structure(list(visitor_id = c(175464, 175464, 175464, 892530,
892530, 892530, 892530, 892530, 892530, 1006916, 1006916, 1006916,
1336852, 1336852, 1336852, 2370624, 2370624, 2370624, 3347200,
3347200, 3347200, 4539320, 4539320, 4539320, 4539320, 4539320,
4666936, 4666936, 4666936, 4697670), event_type = c("human1", "human1",
"human2", "human1", "eventBegins", "human1", "human2", "human2", "eventEnds", "human1",
"human1", "human1", "human1", "human1", "human1", "human1", "human1", "human1", "human1",
"human1", "human1", "human1", "eventBegins", "human2", "human2", "human1", "human1",
"human1", "human1", "human1"), datetime = structure(c(1618678444,
1618678444, 1618678444, 1617980667, 1617980668, 1617980668, 1617980668,
1617980679, 1617980679, 1617530138, 1617530138, 1617530138, 1617299837,
1617299837, 1617299837, 1617621792, 1617621792, 1617621792, 1618145874,
1618145874, 1618145874, 1619013964, 1619013964, 1619013964, 1619014004,
1619014005, 1617282418, 1617282418, 1617282418, 1619543098), class = c("POSIXct",
"POSIXt"), tzone = "UTC")), row.names = c(NA, 30L), class = "data.frame")
如果您对如何解决此问题有任何想法,请告诉我 - 我的想法已经不多了。 TIA。
【问题讨论】:
-
你能不能这么好心,
dput()你的数据框并在这里发布。 -
如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example。
-
谢谢!这里有点新手,但我会看看并尝试改进我的帖子以使其更清晰。
-
您能否更清楚地了解“我正在尝试获取数据集中每个 id 1 的时间差的平均值”。你想获得所有人类的每个 id 的平均值还是只为human2?。写一两个方程式通常会很有帮助,这样可以使其更加具体并避免歧义。 :)
-
在你的例子中可能是这样的(目前对我不起作用): df %>% group_by(id) %>% mutate(event_begins_per_id = min(datetime[event == "eventBegins "]), time_diff = datetime - event_begins_per_id, avg_time_diff_per_id = mean(time_diff[!event %in% c("eventBegins", "eventEnds")])) %>% summarise(mean_time_diff = mean(avg_time_diff_per_id, na.rm = TRUE )) 虽然我认为由于 'group_by(id)' 而无法获得所有 id 的平均值?