如何解决在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])]]
您可以对其他列执行相同的操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。