循环中的对象选择

时间:2018-07-26 16:12:22

标签: r automation

我目前在R的循环中遇到对象选择的永久性问题。我非常相信这是一个常见问题,但是我似乎找不到答案,所以我在这里...

这是我遇到的一个实际问题的例子: 我有一个数据框作为源,它具有一系列按顺序命名的变量(X1,X2,X3,X4等)。我希望创建一个将数据作为源的函数,将其与另一个数据集匹配以创建新的组合数据集。

变量的数量将有所不同。我想向我的函数传递一个参数,该参数告诉它我有多少个变量,并且该函数需要调整它将相应地运行代码的次数。这似乎是for循环的一项任务,但同样,似乎并没有一种在循环内选择和重新创建变量的简便方法。

这是我需要重复的代码:

new1$X1 <- data$X1[match(new1$matf1, data$rowID)]
new1$X2 <- data$X2[match(new1$matf1, data$rowID)]
new1$X3 <- data$X3[match(new1$matf1, data$rowID)]
new1$X4 <- data$X4[match(new1$matf1, data$rowID)]
new1$X5 <- data$X5[match(new1$matf1, data$rowID)]
(...)
return(new1)

我尝试过这样的事情:

for(i in 1:5) {
  new1$Xi <- assign(paste0("X", i)), as.vector(paste0("data$X",i)[match(new1$matf1, data$rowID)])
}    

没有成功。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以尝试这种简单的方法,但是联接会更有效:

vals <- paste0('X',1:5)

for(i in vals){
    new1[[i]] <- data[[i]][match(new1$matf1, data$rowID)]
}