在R中动态更改变量名称的一部分

问题描述

我正在尝试使事后分析自动化,但是我将尝试用一个隐喻来解释自己,我相信这将说明我正在尝试做的事情。

假设我在两个列表中都有一个字符串列表,在第一个列表中我有一个名称列表,在另一个列表中有一个形容词列表:

list1 <- c("apt","farm","basement","lodge")
list2 <- c("tiny","noisy")

我们还假设我有一个数据框架,其中包含一堆数据,我将其命名为这样的名称,因为它们是某些先前线性分析的结果。

> head(df)
     qt[apt_tiny,Intercept]  qt[apt_noisy,Intercept]   qt[farm_tiny,Intercept]
1    4.196321                -0.4477012                -1.0822793
2    3.231220                -0.4237787                -1.1433449 
3    2.304687                -0.3149331                -0.9245896 
4    2.768691                -0.1537728                -0.9925387
5    3.771648                -0.1109647                -0.9298861
6    3.370368                -0.2579591                -1.0849262

and so on...

现在,我要做的是进行一些自动操作,使先前列表中的字符串在for循环中动态变化。我列出了所有不同组合的清单,并将其称为distinct。现在,我正在尝试执行以下操作:

for (i in 1:nrow(distinct)){
var1[[i]] <- list1[[i]]
var2[[i]] <- list2[[i]]

#this being the insertable name part for the rest of the variables and parts of variable,#i'll put it inside %var[[i]]% for the sake of the explanation.

%var1[[i]]%_%var2[[i]]%_INT <- df$`qt[%var1[[i]]%_%var2[[i]]%,Intercept]`+ df$`qt[%var1[[i]]%,Intercept]`

}

这里对我来说困难的是%var1[[i]]%同时位于变量中,并且作为数据框内的列名。

任何帮助将不胜感激。

解决方法

您不能使用$来提取带有字符变量的列值。因此df $`qt [%var1 [[i]]%_%var2 [[i]]%,拦截]将无法正常工作。

使用sprintf创建列的名称,然后使用[[提取它。例如,将"qt[apt_tiny,Intercept]"构造为列名,您可以执行以下操作:

i <- 1
sprintf('qt[%s_%s,Intercept]',list1[i],list2[i])
#[1] "qt[apt_tiny,Intercept]"

现在使用[[来对df中的该列进行子集

df[[sprintf('qt[%s_%s,list2[i])]] 

您可以对其他列执行相同的操作。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...