【问题标题】:Dynamically change part of variable name in R动态更改R中变量名的一部分
【发布时间】:2020-08-31 10:51:53
【问题描述】:

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

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

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]]% 同时在一个变量中,并且作为数据框内的列名。

任何帮助将不胜感激。

【问题讨论】:

    标签: r dynamic rename naming


    【解决方案1】:

    您不能使用$ 提取具有字符变量的列值。所以 df$`qt[%var1[[i]]%_%var2[[i]]%,Intercept] 不起作用。

    使用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,Intercept]', list1[i], list2[i])]] 
    

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

    【讨论】:

    • 我明白了,我将尝试使用 sprintf 和子集来遵循您的建议。谢谢!
    猜你喜欢
    • 2015-03-30
    • 2016-08-31
    • 2014-07-09
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多