R:每小时的数据总和。非连续5秒间隔的数据

时间:2016-12-08 19:25:26

标签: r datetime sum

我的数据间隔为5秒,但未连续收集。有一个列可以使用以下三种可能之一:ABC

datetime                    c1
2000-01-01 00:00:00          A      
2000-01-01 00:00:05          B
2000-01-01 00:00:10          B
2000-01-01 00:00:15          A
2000-01-01 00:06:05          C
2000-01-01 00:06:05          C
2000-01-01 01:00:05          B

我正在尝试计算每个ABC的计数。每小时。所以从2000-01-01 00:00:002000-01-01 01:00:00,有很多A,B&C和C&C。

预期产出:

starttime                countA   countB   countC
2000-01-01 00:00:00         2        2        2
2000-01-01 01:00:00         n        1        n
2000-01-01 02:00:00         n        n        n
2000-01-01 03:00:00         n        n        n

        hour               c1     count    
 2000-01-01 00:00:00        A        2        
 2000-01-01 00:00:00        B        2
 2000-01-01 00:00:00        C        3
 2000-01-01 01:00:00        B        1
         ...
 2000-01-01 07:00:00        A        n

1 个答案:

答案 0 :(得分:2)

这是实现目标的一种方式。首先,在第一个小时内包含00:00:00,我想您希望在下一个小时内包括01:00:00。在这种方法中,您想要创建两个变量。一个是date,另一个是hour。我使用group_by()format()创建了它们。我使用这两个变量以及c1定义了组。然后,我计算了每个组sammarise()存在多少行。请注意,您的数据框在此处称为mydf

library(dplyr)

mydf %>%
group_by(date = format(datetime, "%Y-%m-%d"),
         hour = format(datetime, "%H"),
         c1) %>%
summarize(count = n())

#        date  hour    c1 count
#       <chr> <chr> <chr> <int>
#1 2000-01-01    00     A     2
#2 2000-01-01    00     B     2
#3 2000-01-01    00     C     2
#4 2000-01-01    01     B     1

DATA

mydf <- structure(list(datetime = structure(c(946684800, 946684805, 946684810, 
946684815, 946685165, 946685165, 946688405), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), c1 = c("A", "B", "B", "A", "C", "C", 
"B")), .Names = c("datetime", "c1"), row.names = c(NA, -7L), class = "data.frame")