如何动态生成数据框变量名称并用它来寻址现有数据框变量?

How to generate data frame variable name on the fly and address existing data frame variable with it?

我想做这样的事情:

df <- data.frame("v1"=c(1,2,3), "v2"=c(1,2,3), "v3"=c(1,2,3), "v4"=c(1,2,3))

a <- 2

paste0("df$v", a)
get(paste0("df$v", a))
mget(paste0("df$v", a))

输出应该是控制台打印的df$v2内容。

问题:我这样做的主要原因是我想用动态生成的变量名来处理数据框变量。我不想生成新的变量名,我只想为现有的变量名生成可用于寻址的变量名。我怎样才能做到这一点?

你可以在这里使用eval, parse(

eval(parse(text = paste0("df$v", a)))
#[1] 1 2 3

但是,我认为这不是访问变量的好方法。除了即时生成 df$v2 之外,您能否仅即时生成 v2 以便您可以执行

df[[paste0("v", a)]]
#[1] 1 2 3

简答:使用 [[ 而不是 $,例如df[[paste0("v",a)]].

一般不推荐

get(),但如果需要使用,则必须分两步进行:

get("df")[[paste0("v",a)]]

(正如@RonakShah 所建议的,假设您知道您将要查看 df 并使用 df[[paste0("v",a)]]

如果坚持使用$,可以使用eval(parse(.)):

eval(parse(text=paste0("df$v",a)))