【问题标题】:Binning data by time in R [duplicate]在R中按时间分组数据[重复]
【发布时间】:2020-07-13 13:00:32
【问题描述】:

我有这个以 5 秒为间隔收集的时间序列数据帧 (df)。对每个 ID 值重复每个时间值(仅显示 ID 1001 和 1002)。我希望能够按每个 ID 的每分钟间隔对 Data 列进行 bin/sum。

Time                    ID      Data
2010-01-10 13:45:00     1001    0
2010-01-10 13:45:05     1001    1
2010-01-10 13:45:10     1001    0
2010-01-10 13:45:15     1001    1
....
2010-01-10 13:45:00     1002    0
2010-01-10 13:45:05     1002    0
2010-01-10 13:45:10     1002    0
2010-01-10 13:45:15     1002    1
....

这是一个可重现的例子:

library(lubridate)
library(tidyverse)

# generate minimal example
df <- tibble(
  Time = rep(
    seq(
      ymd_hms("2010-01-10 00:00:00"), 
      ymd_hms("2010-01-10 23:59:55"), 
      "5 sec"),
    2
  )
)

df$ID   <- rep(c("1001","1002"), each = nrow(df)/2)
df$Data <- rnorm(nrow(df))

我希望我的输出数据框看起来像

Time               ID         Data
2010-01-10 13:45   1001       2
2010-01-10 13:46   1001       
2010-01-10 13:47   1001  
2010-01-10 13:45   1002       1
2010-01-10 13:46   1002
2010-01-10 13:47   1002  

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。现在您的示例输入不是我们可以轻松复制/粘贴到 R 中的东西,因为如果空格和“...”s。最好分享dput() 或类似的东西。

标签: r dplyr


【解决方案1】:

您可以使用floor_date 对每分钟的Time 进行四舍五入,并在每个组中取sum

library(dplyr)
library(lubridate)

df %>%
  mutate(Time = ymd_hms(Time)) %>%
  group_by(ID, Time = floor_date(Time, "1 min")) %>%
  summarise(Data = sum(Data))

【讨论】:

  • 完美!谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多