r - 使用 data.table[,,by=...] 时包括所有排列

标签 r data.table collapse

我有一个大 data.table我正在使用 ,by 折叠到月份级别.

vars 有 5 个,级别数为:c(4,3,106,3,1380) . 106 是月,1380 是地理单位。事实证明有一些 0,因为有些单元格没有值。 by丢弃这些,但我希望保留它们。

可重现的例子:

require(data.table)

set.seed(1)
n <- 1000
s <- function(n,l=5) sample(letters[seq(l)],n,replace=TRUE)
dat <- data.table( x=runif(n), g1=s(n), g2=s(n), g3=s(n,25) )
datCollapsed <- dat[ , list(nv=.N), by=list(g1,g2,g3) ]
datCollapsed[ , prod(dim(table(g1,g2,g3))) ] # how many there should be: 5*5*25=625
nrow(datCollapsed) # how many there are

是否有一种有效的方法可以用 0 填充这些缺失值,以便通过变量的所有排列都在结果折叠的 data.table 中?

最佳答案

对唯一值进行笛卡尔连接,并使用它连接回您的结果

dat.keys <- dat[,CJ(g1=unique(g1), g2=unique(g2), g3=unique(g3))]
setkey(datCollapsed, g1, g2, g3)
nrow(datCollapsed[dat.keys])  # effectively a left join of datCollapsed onto dat.keys
# [1] 625

请注意,现在缺失的值是 NA,但如果需要,您可以轻松地将其更改为 0。

关于r - 使用 data.table[,,by=...] 时包括所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914284/

相关文章:

collapse - LINQPad:无论如何要使 Dump() 结果最初折叠?

r - 选择数据表中的连续列和非连续列,如 dplyr 的 group_by 中

r - 尺寸在 geom_point 中的真正含义是什么?

r - 想要删除重复的行,除非列中存在 NA 值

r - 当键列数不同时合并data.table

r - 使用不等式表达式的内连接

twitter-bootstrap - Bootstrap Accordion 面板/折叠

javascript - 在 React Native 中折叠项目

r - 使用 BigQuery 和 R 分析数据

r - 如何使用 R 中的包 'circular' 在玫瑰图中移动容器