【发布时间】:2019-12-29 23:34:05
【问题描述】:
我正在尝试为滚动窗口(例如 12 obs.)中字符列的更改次数创建一个指示器,但按组创建。在没有分组的情况下,rollapply 和 data.table 的 uniqueN 使用 data.table 可以做到这一点:
library(data.table)
library(zoo)
df <- data.table(id = c(rep(1:5, each = 53), 5),
time = c(rep(1:53, times = 5), 54),
geo = c("E","E","E","B","B","B","B","B","B","B","A","A","A","A","A","A","A","C","C","C","C","C","C","C","G","G","G","G","G","G","G","G","G","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","D","D","D","D","D","D","G","G","G","G","G","E","E","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","I","I","I","I","I","B","B","B","B","B","B","B","B","B","D","D","D","D","D","D","D","D","D","D","D","D","E","E","E","E","E","E","E","E","E","E","E","E","E","E","E","I","I","I","I","I","I","I","I","H","C","C","C","C","C","C","C","C","C","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","B","B","B","B","B","B","B","B","B","B","B","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","I","I","I","I","I","I","E","E","E","E","E","E","E","E","E","E","F","F","A","A","A","A","A"))
# works
df[, change := rollapply(geo, width = 12, FUN = uniqueN, na.pad = TRUE, align = "right")]
但是当我按 id 对它们进行分组时,它不起作用
# does not work
df[, change := rollapply(geo, width = 12, FUN = uniqueN, na.pad = TRUE, align = "right"), by = id]
有没有办法进行滚动唯一计数,最好使用 data.table?
【问题讨论】:
-
它不起作用是什么意思?对我来说很好,但有一条警告消息指出
1: In rollapply.zoo(zoo(data), ...) : na.pad argument is deprecated。我会使用df[, change := rollapplyr(geo, width = 12, FUN = uniqueN,fill = NA), by = id] -
length(unique(.)) 如果有很多组可能会更快
-
问题已通过将
rollapply函数包装在as.numeric中得到解决,因为变量更改是按逻辑创建的,并且无法处理 0 和 1(或 NA)以外的任何数字
标签: r data.table grouping vertical-scrolling rolling-computation