【问题标题】:R: assign group based on 24 hr time frameR:根据 24 小时时间框架分配组
【发布时间】:2018-05-30 17:28:54
【问题描述】:

我有这个数据集:

    test <- data.frame("Event" = c("A", "B", "C","D","E"),"startTime" = c("2017-08-01 00:37:27", "2017-08-01 00:44:32", "2017-08-01 23:30:00","2017-08-01 23:55:47", "2017-08-02 01:00:00" ), "endTime" = c("2017-08-01 20:13:13", "2017-08-01 21:30:45", "2017-08-02 09:00:00","2017-08-01 23:56:47", "2017-08-02 04:18:38"), "Bin" = c(1,1,2,1,2))

我想创建一个 Bin 列,您可以在其中根据 startTime 和 endTime 的 24 小时帧将值 1 分配给 n。例如,事件 A 和 B 属于 Bin(组)#1,因为它们都开始于 2017 年 8 月 1 日并结束于同一日期。但是,事件 C 属于 bin #2,因为它在第二天而不是 2017-08-01 结束。事件 D 属于 bin #2,因为它在 2017-08-02 开始和结束,依此类推。

我不知道如何根据这个逻辑正确分配组值。任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 那么在确定 Bin 时,只有结束日期很重要?
  • 是的,这很重要
  • 我不认为这个规则是明确表达的,但也许是test$Bin2 &lt;- as.integer(as.factor(as.Date(test$endTime, tz = "")))
  • 嗨,没有产生正确的组值分配,并且它不是以值 1 开始
  • 如果 endTime 是 8-04 aka bin 是什么,bin 是从第一个 endtime 算起的天数,还是只是基于结束时间的条目号?

标签: r datetime grouping data-manipulation


【解决方案1】:

这行得通:

library(dplyr)
library(lubridate)

test %>%
mutate(Bin = if_else(as.Date(test$endTime) - as.Date(test$startTime) == 0, 1,2 )) -> df

【讨论】:

  • 嗨,如果只有 2 个组,并且我有更大的数据集和 n 个组,因为天数更多,这很有效。我只是列出了 2 个组作为示例。对不起,我应该更清楚
【解决方案2】:

这里,bin2 是从 endTime 的最小值算起的天数。

test %>%
    mutate(bin2 = as.integer(as.Date(endTime) - min(as.Date(endTime))) + 1)

【讨论】:

  • 这行不通,因为它主要会产生 1,偶尔会产生 2。但是在事件 C 之后会有属于第一个时间帧(bin)的事件,所以你不能使用 cumsum 来分组值2的第一次出现
  • 你能把这个事件 C 包含在测试数据框中吗?
猜你喜欢
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2013-07-03
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多