浏览了有关该主题的几篇文章,但仍然不知道。以为我只会问:
我写了一个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
但是循环不起作用。没有错误消息,也没有生成新变量。救命!谢谢。
答案 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
这样,您无需使用数据框即可获得六个新变量。