gpt4 book ai didi

R:强制 data.table 计算所有交互

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

这是一个数据表:

dat = data.table(var1=rnorm(120), var2=rep(c('a','b','c'),40), var3=rep(c(1,2,3,2,1,2,1,2,2,3,1,2),10))

dat2 = dat[,list(resp = mean(var1)),by=list(var2, var3)]

dat2 ,只有 dat$var2 的现有交互等 dat$var3存在。怎么强制 dat2包含 dat2 的所有 9 种可能交互的结果(而不是 var2 的 7 行)和 var3 ?如果data.table没有直接的解决方案,解决这个问题最简单的方法是什么?
table(dat$var2, dat$var3)

1 2 3
a 20 10 10
b 20 20 0
c 0 30 10

当然,对于 dat 中不存在数据的交互, dat2应分别包含 NA。

最佳答案

您可以设置 key然后使用 CJ 进行交叉连接在 i像这样...

setkey( dat , var2 , var3 )

# Thanks to @Shadow for pointing out to use unique() in the cross join
dat[ CJ( unique(var2) , unique(var3) ) , mean(var1) ]
# var2 var3 V1
#1: a 1 -0.25771923
#2: a 2 0.04143057
#3: a 3 0.28878451
#4: b 1 0.18865887
#5: b 2 0.53632552
#6: b 3 NA
#7: c 1 NA
#8: c 2 0.38015021
#9: c 3 0.49809159

作为解释, CJ()创建一个 data.tableix (在这种情况下 dat )加入。它形成为提供给 CJ() 的向量的叉积。 ,这恰好是您正在寻找的!

关于R:强制 data.table 计算所有交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20566260/

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