R生成所有可能的交互变量

use*_*021 6 statistics r

我有一个带变量的数据框,比如a,b,c,d

dat <- data.frame(a=runif(1e5), b=runif(1e5), c=runif(1e5), d=runif(1e5))
Run Code Online (Sandbox Code Playgroud)

并希望在每列之间生成所有可能的双向交互项,即:ab,ac,ad,bc,bd,cd.实际上我的数据框有超过100列,所以我不能手动编码.什么是最有效的方法(注意我不想要b和b a)?

Gre*_*now 13

您打算如何处理所有这些互动条款?有几种选择,最好取决于你想要做什么.

如果您想将交互传递给类似的建模函数,lm或者aov它非常简单,只需使用以下.^2语法:

fit <- lm( y ~ .^2, data=mydf )
Run Code Online (Sandbox Code Playgroud)

上面将调用lm并告诉它适合所有主效应以及mydf排除变量的所有双向交互y.

如果由于某种原因你真的想要计算所有的交互,那么你可以使用model.matrix:

tmp <- model.matrix( ~.^2, data=iris)
Run Code Online (Sandbox Code Playgroud)

这将包括拦截列和主效果列,但如果您不想要它们,可以删除它们.

如果您需要与建模不同的东西,那么您可以combn在评论中使用@akrun提及的功能.