gpt4 book ai didi

r - 循环遍历数据框中的变量以创建交互

转载 作者:行者123 更新时间:2023-12-01 07:21:58 26 4
gpt4 key购买 nike

我在一个数据框中有 100 个分类变量,我想为我的预测模型创建交互。我创建了一个循环来执行此操作,但最终得到了重复项。

df <- data.frame(Col1=c("A","B","C"), 
Col2=c("F","G","H"),
Col3=c("X","Y","Z"))

这给了我们:

  Col1 Col2 Col3
1 A F X
2 B G Y
3 C H Z

当我运行代码以创建交互变量时

vars <- colnames(df) 
for (i in vars) {
for (j in vars) {
if (i != j) {
df[,c(paste0(i, j))] <- paste(df[[i]],df[[j]],sep='*')}}}

我最终得到了诸如 Col1Col2 与 Col2Col1 相同的复制品。

> str(df)
'data.frame': 3 obs. of 9 variables:
$ Col1 : Factor w/ 3 levels "A","B","C": 1 2 3
$ Col2 : Factor w/ 3 levels "F","G","H": 1 2 3
$ Col3 : Factor w/ 3 levels "X","Y","Z": 1 2 3
$ Col1Col2: chr "A*F" "B*G" "C*H"
$ Col1Col3: chr "A*X" "B*Y" "C*Z"
$ Col2Col1: chr "F*A" "G*B" "H*C"
$ Col2Col3: chr "F*X" "G*Y" "H*Z"
$ Col3Col1: chr "X*A" "Y*B" "Z*C"
$ Col3Col2: chr "X*F" "Y*G" "Z*H"

有没有办法删除这些重复项?

最佳答案

您不需要为每对变量创建显式交互列。相反,模型公式中的 Col1 * Col2 将自动生成交互。例如,如果您的结果变量是 y(这将是您数据框中的一列),并且您想要一个包含其他列之间所有双向交互的回归公式,您可以这样做:

form = reformulate(apply(combn(names(df)[-grep("y", names(df))], 2), 2, paste, collapse="*"), "y")

form
y ~ Col1 * Col2 + Col1 * Col3 + Col2 * Col3

那么您的回归模型将是:

mod = lm(form, data=df)

关于r - 循环遍历数据框中的变量以创建交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875282/

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