2

我想知道如何使用粘贴创建一个变量名(已经存在的变量),然后访问这个变量。

例子:

var<-c("A","B","C")

for (i in 1:3){
     paste0("var")[i] 
}

注意:假设我需要用来paste0创建变量名(我正在处理 data.frames 并paste0用于为不同的列创建变量)

谢谢!

编辑:

好的,这是更大的图景:我有两个数据框:smallDFbigDF. 我想将数据从 bigDF 复制到 smallDF。匹配是用user_name.

user <- c("userA","userB","userC")
variables<-c("user_age","user_city","user_street")

for (t in 1:length(variables)){

  for (j in 1:length(user)){

    x<-paste0("bigDF$",variables[t])
    y<-paste0("smallDF$",variables[t])

    tmp<-unique(x[which(bigDF$user_name==user[j])])[1] # unique will only yield one entry
    replace<-c(as.character(rep(tmp,length(y[which(smallDF$user_name==user[j])]))))
    y[which(smallDF$user_name==user[j])]<-replace

  }
}

上面的代码不起作用。但是,当我避免第一个 for 循环并用各自的变量名(bigDF$user_age 等)替换 x 和 y 时,一切正常。这就是为什么我认为必须有一种简单的方法来使用外部 for 循环动态创建这些变量名。谢谢大家!

4

2 回答 2

3

先看看帮助?"[["然后可能在fortune(312)。问题是,沿着这条线的某个地方,您在$没有正确了解它的快捷方式的情况下了解了神奇快捷方式,并且觉得您需要在两点之间的最长距离的情况下使用快捷方式(有点像使用试图从伦敦到巴黎时,纽约市和波士顿之间的捷径)。

如果您使用类似的代码bigDF[[ variables[t] ]]而不是尝试使用$,那么它将访问bigDF具有当前名称的列variables[t]

学会[[正确使用和其他子集(仅$在适当的地方使用),您的整个过程将大大简化。

于 2013-09-17T14:34:52.717 回答
0

解决方案:

    dat <- eval(parse(text="paste0"))

dat你有输出。

于 2013-09-17T11:30:04.167 回答