从for循环创建变量

从for循环创建变量,r,loops,dataframe,R,Loops,Dataframe,我想在一个数据帧中创建大量的顺序变量,这比在下面的虚拟数据中要多得多。我已经试过在a:b中使用I,见下文,但我无法使其工作 # Create test dataframe # test<-as.data.frame(1:15) test$X16<-10 test$P_15<-20 test$P_16<-25 colnames(test)[1]<-"X15" # Proposed do loop # fo

我想在一个数据帧中创建大量的顺序变量,这比在下面的虚拟数据中要多得多。我已经试过在a:b中使用I,见下文,但我无法使其工作

 # Create test dataframe #

    test<-as.data.frame(1:15)
    test$X16<-10
    test$P_15<-20
    test$P_16<-25
    colnames(test)[1]<-"X15"

    # Proposed do loop #

    for (i in 15:16){
      test$rate_[[i]]<-1000*test$X[[i]]/test$P_[[i]]
    }
编辑-Karsten W提出的解决方案非常有效,谢谢

for (i in 15:16){
  test[[paste("rate_", i, sep="")]]<-1000*test[[paste("X", i, sep="")]]/test[[paste("P_", i, sep="")]]
}

尝试测试[[pasteX,i,sep=]],如果我读对了,他们正在尝试匹配案例,即X15与P_15。正则表达式可能是最一般的答案。您不需要循环。为什么不直接测试[pasterate,15:16]@KonradRudolph?他使用paste,因为当他想要X15列时,他不能使用X[[15]]引用现有列。他还希望为每个i创建test$rate_i列。如果你有一个不使用粘贴的解决方案,那将是令人耳目一新的。@DavidArenburg啊,我忽略了这是一个data.frame的事实。我的评论在这里不适用。也就是说,实现这一点的一种方法是创建一个中间列表,并将其cbind到现有的data.frame。当然,设置colnames仍然需要粘贴,但这本身当然也不错。