【问题标题】:Looping over variables to generate interaction variables循环变量以生成交互变量
【发布时间】:2022-11-30 03:37:56
【问题描述】:

对于 var1 中的每个变量,我希望它与 var2 中的每个变量交互。在 Stata 中,我可以简单地使用嵌套的 foreach 循环来执行此操作,但我无法在 R 中复制逻辑。

统计代码:

foreach var1 in
    gdp_g gdp_g_l GPCP_g GPCP_g_l
{;
foreach var2 in
    polity2l y_0 ethfrac Oil lmtnest 
{;
quietly gen `var1'_`var2' = `var1'*`var2';
};
};

不确定 R 中的直觉。

vars1 <- list("gdp_g", "gdp_g_l", "GPCP_g", "GPCP_g_l")
vars2 <- list("polity2l", "y_0", "ethfrac", "Oil", "lmtnest")

multiplyit <- function(x){
  paste(x, collapse = "*")
}

for(i in 1:length(vars1)) {
  for(j in 1:length(var2)){
    vars1[i]*vars2[j]
  }
}

也许我需要使用公式来乘以每个唯一的变量组合。

【问题讨论】:

  • 如果您包含一个简单的 reproducible example 以及可用于测试和验证可能的解决方案的示例输入和所需的输出,则可以更轻松地为您提供帮助。也许您正在寻找expand.grid?您期望结果的结构如何?

标签: r loops foreach formula interaction


【解决方案1】:

您可以使用 combinat 包中的 combn 来获取所有对的唯一组合,然后使用 paste 折叠由 * 分隔的所有字符串

> library(combinat)
> combn(c(vars1, vars2), 2, fun = paste, collapse="*")
 [1] "gdp_g*gdp_g_l"     "gdp_g*GPCP_g"      "gdp_g*GPCP_g_l"    "gdp_g*polity2l"    "gdp_g*y_0"        
 [6] "gdp_g*ethfrac"     "gdp_g*Oil"         "gdp_g*lmtnest"     "gdp_g_l*GPCP_g"    "gdp_g_l*GPCP_g_l" 
[11] "gdp_g_l*polity2l"  "gdp_g_l*y_0"       "gdp_g_l*ethfrac"   "gdp_g_l*Oil"       "gdp_g_l*lmtnest"  
[16] "GPCP_g*GPCP_g_l"   "GPCP_g*polity2l"   "GPCP_g*y_0"        "GPCP_g*ethfrac"    "GPCP_g*Oil"       
[21] "GPCP_g*lmtnest"    "GPCP_g_l*polity2l" "GPCP_g_l*y_0"      "GPCP_g_l*ethfrac"  "GPCP_g_l*Oil"     
[26] "GPCP_g_l*lmtnest"  "polity2l*y_0"      "polity2l*ethfrac"  "polity2l*Oil"      "polity2l*lmtnest" 
[31] "y_0*ethfrac"       "y_0*Oil"           "y_0*lmtnest"       "ethfrac*Oil"       "ethfrac*lmtnest"  
[36] "Oil*lmtnest"      

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2018-11-17
    • 2016-04-17
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多