簡體   English   中英

R:使用外部分組向量的 data.table 聚合

[英]R: data.table aggregate using external grouping vector

我有數據

dt <- data.table(time=as.POSIXct(c("2018-01-01 01:01:00","2018-01-01 01:05:00","2018-01-01 01:01:00")), y=c(1,10,9))
> dt
                  time  y
1: 2018-01-01 01:01:00  1
2: 2018-01-01 01:05:00 10
3: 2018-01-01 01:01:00  9 

我想按time聚合。 通常,我會這樣做

dt[,list(sum=sum(y),count=.N), by="time"]
                  time sum count
1: 2018-01-01 01:01:00  10     2
2: 2018-01-01 01:05:00  10     1

但這一次,我還想在兩者之間的分鍾內獲得零值,即,

                  time sum count
1: 2018-01-01 01:01:00  10     2
2: 2018-01-01 01:02:00   0     0
3: 2018-01-01 01:03:00   0     0
4: 2018-01-01 01:04:00   0     0
5: 2018-01-01 01:05:00  10     1

例如,這是否可以使用外部向量來完成

times <- seq(from=min(dt$time),to=max(dt$time),by="mins")

可以作為分組變量提供給 data.table 函數嗎?

您通常會使用連接(在聚合之前或之后)。 例如:

dt <- dt[J(times), on = "time"]
dt[,list(sum=sum(y, na.rm = TRUE), count= sum(!is.na(y))), by=time]
#                  time sum count
#1: 2018-01-01 01:01:00  10     2
#2: 2018-01-01 01:02:00   0     0
#3: 2018-01-01 01:03:00   0     0
#4: 2018-01-01 01:04:00   0     0
#5: 2018-01-01 01:05:00  10     1

或者在“管道”版本中:

dt[J(times), on = "time"][
  , .(sum = sum(y, na.rm = TRUE), count= sum(!is.na(y))), 
  by = time]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM