gpt4 book ai didi

通过 R data.table 中的变量保留 by-without-by

转载 作者:行者123 更新时间:2023-12-04 11:03:53 24 4
gpt4 key购买 nike

我想在使用 data.table 的 by-without-by 操作中保留 by 变量。

我有一个曾经有效的 by-without-by(大约 2 年前),现在有了最新版本的 data.table 我认为行为一定已经改变了。

这是一个可重现的例子:

library(data.table)
dt <- data.table( by1 = letters[1:3], by2 = LETTERS[1:3], x = runif(3) )
by <- c("by1","by2")
allPermutationsOfByvars <- do.call(CJ, sapply(dt[,by,with=FALSE], unique, simplify=FALSE)) ## CJ() to form index
setkeyv(dt, by)
dt[ allPermutationsOfByvars, list( x = x ) ]

产生:

> dt[ allPermutationsOfByvars, list( x = x ) ]
x
1: 0.9880997
2: NA
3: NA
4: NA
5: 0.4650647
6: NA
7: NA
8: NA
9: 0.4899873

我可以这样做:

> cbind( allPermutationsOfByvars, dt[ allPermutationsOfByvars, list( x = x ) ] )
by1 by2 x
1: a A 0.9880997
2: a B NA
3: a C NA
4: b A NA
5: b B 0.4650647
6: b C NA
7: c A NA
8: c B NA
9: c C 0.4899873

这确实有效,但不够优雅且可能效率低下。

是否有我遗漏的论点或保留 by 变量的聪明策略?

最佳答案

添加 by = .EACHI 以获得“by-without-by”又名 by-EACH-element-of-I:

dt[allPermutationsOfByvars, x, by = .EACHI]

这就是我完成初始部分的方式:

allPermutationsOfByvars = dt[, do.call(CJ, unique(setDT(mget(by))))]

最后,on 参数现在通常是更好的选择(相对于 setkey)。

关于通过 R data.table 中的变量保留 by-without-by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583959/

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