我的数据间隔为5秒,但未连续收集。有一个列可以使用以下三种可能之一:A
,B
或C
。
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
我正在尝试计算每个A
,B
和C
的计数。每小时。所以从2000-01-01 00:00:00
到2000-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
答案 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")