gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:47:48 25 4
gpt4 key购买 nike

我有一个大 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com