Rem*_*i.b 7 combinations interaction r combinatorics data.table
这是一个data.table:
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)]
Run Code Online (Sandbox Code Playgroud)
在dat2,仅存在dat$var2et的现有相互作用dat$var3.我怎么能强迫dat2包含所有9个可能的交互(而不是7行的结果dat2为)var2和var3?如果没有data.table的直接解决方案,解决此问题的最简单方法是什么?
table(dat$var2, dat$var3)
1 2 3
a 20 10 10
b 20 20 0
c 0 30 10
Run Code Online (Sandbox Code Playgroud)
当然,对于不存在数据的交互dat,dat2应该在resp中包含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
Run Code Online (Sandbox Code Playgroud)
并通过解释的方式,CJ()创建一个data.table在i的x(在这种情况下dat)加入上.它是作为提供的载体的交叉产物而形成的CJ(),恰好正是您所寻找的!
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |