R循环更改变量名称

时间:2018-08-24 18:26:14

标签: r loops for-loop

浏览了有关该主题的几篇文章,但仍然不知道。以为我只会问:

我写了一个for循环:

for (i in 0:5) {
     est16_y2016$pov50_[i] <- est16_y2016$pop[i]*est16_y2016$ITPR_0.5
               }

获得与以下代码相同的结果:

 est16_y2016$pov50_0 <- est16_y2016$pop0 * est16_y2016$ITPR_0.5
 est16_y2016$pov50_1 <- est16_y2016$pop1 * est16_y2016$ITPR_0.5
 est16_y2016$pov50_2 <- est16_y2016$pop2 * est16_y2016$ITPR_0.5 
 est16_y2016$pov50_3 <- est16_y2016$pop3 * est16_y2016$ITPR_0.5 
 est16_y2016$pov50_4 <- est16_y2016$pop4 * est16_y2016$ITPR_0.5 
 est16_y2016$pov50_5 <- est16_y2016$pop5 * est16_y2016$ITPR_0.5 

但是循环不起作用。没有错误消息,也没有生成新变量。救命!谢谢。

3 个答案:

答案 0 :(得分:1)

尽管在交互式R会话中,构造data$column_name非常方便,但是在编程时可能会引起一些问题。 @ A.Suliman的评论提出了一种解决这些问题的方法,这是另一种方法。

for(i in 0:5){
    target <- paste("pov50", i, sep = "_")
    pop <- paste0("pop",i)
    est16_y2016[[target]] <- est16_y2016[[pop]]*est16_y2016[["ITPR_0.5"]]
}

答案 1 :(得分:0)

如果没有可重复的示例,很难回答您的问题,但是我会给您一个机会。 est16_y2016$pop[i]将为您提供est16_y2016 $ pop的第i个元素(可能甚至不存在。您想要的是est16_y2016[paste0("pop",i)] 因此您的代码应如下所示:

for (i in 0:5) 
    {
     est16_y2016[[paste0("pov50_",i)]] <- est16_y2016[[paste0("pop",i)]]*est16_y2016$ITPR_0.5
     }

(已编辑)

答案 2 :(得分:-1)

使用paste()创建新的变量名称很容易,问题是如何使用相应的变量而不是变量名。

  for (i in 0:5){ 
    # Create new variable names
    pov.name = paste0("est16_y2016$pov50_",i)
    pop.name = paste0("est16_y2016$pop",i)

    assign(pov.name,eval(parse(text = pop.name))*est16_y2016$ITPR_0.5)
    }

在此代码中,

eval(parse(text = pop.name)使用字符串“ pop.name” 作为变量名

assign(pov.name,value1)创建一个名为 pov.name 的变量,并将value1分配给 pov.name

这样,您无需使用数据框即可获得六个新变量。