如何计算 R 中过去几个小时的相同分类?
How to count same categorical from past hours in R?
我有这个数据集。
df <- data.frame(c("Attribute1", "Attribute1", "Attribute1", "Attribute2", "Attribute2"),
c("2018-11-01 00:00:19", "2018-11-01 00:00:54", "2018-11-01 00:01:17",
"2018-11-01 00:01:23", "2018-11-01 00:01:25"))
names(df) <- c("Signature", "date")
df$date <- as.POSIXct(df$date)
我想知道如何在 R 编程中计算过去 1 小时内的相同属性,这将是我想要的结果:
然后 Count_Signature 将计算过去一小时内有多少 "Attribute 1" 等等。
谢谢
这里有一个解决方案。我利用 data.table
是因为它具有一些不错的时间功能,并且在分组计算方面表现出色。我创建了一个时间索引,根据年、年日和按小时分箱进行折叠。如果您打算根据系统时间以外的 R 编程的 "last hour" 进行分组,则需要修改此项。那样的话,Sys.time()
可以成为你的朋友。
无论如何,这是解决方案:
df <- data.frame(c("Attribute1", "Attribute1", "Attribute1", "Attribute2", "Attribute2"),
c("2018-11-01 00:00:19", "2018-11-01 00:00:54", "2018-11-01 00:01:17",
"2018-11-01 00:01:23", "2018-11-01 00:01:25"))
names(df) <- c("Signature", "date")
df$date <- as.POSIXct(df$date)
library(data.table)
dt <- setDT(df)
dt[, time_idx := paste0(year(date), "-", yday(date), "-", hour(date))]
dt[, Count_Signature := (1L:.N) - 1L, keyby = .(Signature, time_idx)]
dt
#> Signature date time_idx Count_Signature
#> 1: Attribute1 2018-11-01 00:00:19 2018-305-0 0
#> 2: Attribute1 2018-11-01 00:00:54 2018-305-0 1
#> 3: Attribute1 2018-11-01 00:01:17 2018-305-0 2
#> 4: Attribute2 2018-11-01 00:01:23 2018-305-0 0
#> 5: Attribute2 2018-11-01 00:01:25 2018-305-0 1
由 reprex package (v0.2.1)
于 2019-01-03 创建
我有这个数据集。
df <- data.frame(c("Attribute1", "Attribute1", "Attribute1", "Attribute2", "Attribute2"),
c("2018-11-01 00:00:19", "2018-11-01 00:00:54", "2018-11-01 00:01:17",
"2018-11-01 00:01:23", "2018-11-01 00:01:25"))
names(df) <- c("Signature", "date")
df$date <- as.POSIXct(df$date)
我想知道如何在 R 编程中计算过去 1 小时内的相同属性,这将是我想要的结果:
然后 Count_Signature 将计算过去一小时内有多少 "Attribute 1" 等等。
谢谢
这里有一个解决方案。我利用 data.table
是因为它具有一些不错的时间功能,并且在分组计算方面表现出色。我创建了一个时间索引,根据年、年日和按小时分箱进行折叠。如果您打算根据系统时间以外的 R 编程的 "last hour" 进行分组,则需要修改此项。那样的话,Sys.time()
可以成为你的朋友。
无论如何,这是解决方案:
df <- data.frame(c("Attribute1", "Attribute1", "Attribute1", "Attribute2", "Attribute2"),
c("2018-11-01 00:00:19", "2018-11-01 00:00:54", "2018-11-01 00:01:17",
"2018-11-01 00:01:23", "2018-11-01 00:01:25"))
names(df) <- c("Signature", "date")
df$date <- as.POSIXct(df$date)
library(data.table)
dt <- setDT(df)
dt[, time_idx := paste0(year(date), "-", yday(date), "-", hour(date))]
dt[, Count_Signature := (1L:.N) - 1L, keyby = .(Signature, time_idx)]
dt
#> Signature date time_idx Count_Signature
#> 1: Attribute1 2018-11-01 00:00:19 2018-305-0 0
#> 2: Attribute1 2018-11-01 00:00:54 2018-305-0 1
#> 3: Attribute1 2018-11-01 00:01:17 2018-305-0 2
#> 4: Attribute2 2018-11-01 00:01:23 2018-305-0 0
#> 5: Attribute2 2018-11-01 00:01:25 2018-305-0 1
由 reprex package (v0.2.1)
于 2019-01-03 创建