R:使用“$”或“[:]”语法时动态引用列名?

时间:2017-06-05 17:49:36

标签: r dplyr

让我们说在R中我有一个数据框(称为df),其中包含一串包含名为“Var1foo”,“Var2foo”等整数数据的列。

现在假设我要创建一个名为sum1的新列,它将“Var3foo”和“Var6foo”之间的所有内容相加。我可能会这样做:

df$sum1 <- rowSums(df[Var3foo:Var6foo])

或者,我可能会做一些更复杂的事情并创建一个名为foobar的新列apply(),如下所示:

eenie = 3
meenie = 2
df$foobar <- apply(df, 1, function(x) if (sum(x[Var2foo:Var7foo]) == eenie & sum(x[1:Var3foo]) != meenie) 1 else 0)

问题是我总是必须在引用这些列时明确写出列名或索引。如果我想引用{Var x foo“列,其中x <- 8或”Var y foo“y <- 12,那么该怎么办?

我的意思是,我无法df$paste0("Var", x, "foo")sum(x[paste0("Var", x, "foo"):paste0("Var", y, "foo")])

我还考虑使用dplyr::mutate()创建df$sum1df$foobar,但似乎还需要明确的列(变量)名称。

我该怎么办?谢谢!

2 个答案:

答案 0 :(得分:1)

也许您可以使用

来引用该列
df[paste0("Var", x, "foo")]

如果你经常使用这些东西,你可以使用一些功能来减少你的工作,

int2name <- function(x, prefix = "", suffix = ""){
    paste0(prefix, x, suffix)
}

然后你可以使用:

df[int2name(2:4, prefix = "Var", suffix = "foo")]

答案 1 :(得分:1)

一个简单的解决方案是使用

直接引用列
sum(df[,x:y])

当然,这仅适用于列有序的情况。