【发布时间】:2018-03-07 16:21:12
【问题描述】:
我需要为 6*3 变量手动创建交互项。我已将这些变量的名称存储到两个向量中,我们称它们为 a 和 b。让我们将我的数据框称为 df。
a <- c("var1","var2","var3")
b <- c("varA","varB","varC","varD","varE","varF")
我可以手动创建 18 个不同的变量,如下所示:
df$var1.A <- df$var1*df$varA
df$var1.B <- df$var1*df$varB
df$var2.A <- df$var2*df$varA
df$var2.B <- df$var2*df$varB
等等等等,但这显然是不雅且容易出错的。我尝试过使用 apply、sapply 等,但还没有找到解决方案。
更新
感谢@akrun,他的回答让我走上了正确的道路。但是,我现在需要计算另一组交互,这次使用“转换”,所以基本语法是
df <- transform(df, var1.A = var1*varA)
df <- transform(df, var2.A = var2*varA)
df <- transform(df, var1.B = var1*varB)
df <- transform(df, var2.B = var1*varB)
对于其他 17 个交互,依此类推。我试图调整 @akrun 提供的代码来完成这项任务,但没有成功。
我需要计算这些交互项的原因是我正在使用 Amelia 来乘以估算缺失数据。由于交互将在我的分析中,我需要在估计缺失值时将它们包括在内,而 Amelia 不会自动为我这样做。所以我计算了 18 个交互项,并让 Amelia 生成了一些估算数据集。但是,推算的交互项不一定与其组成项一致,后者也缺少 Amelia 推算的数据。因此,为了运行我的分析,我需要根据完整值和估算值计算新的交互项。 Amelia 的开发人员建议通过“变换”来做到这一点,如果将其应用于整个 Amelia 对象,则适用于所有插补。我无法使用 'df$var1.A
结束更新
有人可以帮忙吗?
同时将正确的值分配给函数中正确的位置并创建一个名称以折叠由“。”分隔的相乘变量的名称的任何解决方案将不胜感激。
非常感谢!
【问题讨论】:
-
这个?
mapply(function(x,y){paste(x,y,sep = "*")},a,b) -
您想要的确切结果是什么?