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

R:使用“时动态引用列名”$&引用;或;[:]”;语法?,r,dplyr,R,Dplyr,假设在R中有一个数据帧(称为df),其中有一组列包含名为“Var1foo”、“Var2foo”等整数数据 现在假设我想创建一个名为sum1的新列,它将“Var3foo”和“Var6foo”之间的所有内容相加。我可以这样做: df$sum1 <- rowSums(df[Var3foo:Var6foo]) 问题是在引用这些列时,我总是必须显式地写出列名或索引。如果我想引用列“Varxfoo”,其中x也许您可以使用 df[paste0("Var", x, "foo")] 如果你继续大量使用这

假设在R中有一个数据帧(称为
df
),其中有一组列包含名为“Var1foo”、“Var2foo”等整数数据

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

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

问题是在引用这些列时,我总是必须显式地写出列名或索引。如果我想引用列“Varxfoo”,其中
x也许您可以使用

df[paste0("Var", x, "foo")]
如果你继续大量使用这些东西,你可以使用一些功能来减少你的工作量

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

也许你可以参考一下这个专栏

df[paste0("Var", x, "foo")]
如果你继续大量使用这些东西,你可以使用一些功能来减少你的工作量

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

一个简单的解决方案是直接引用列,使用

sum(df[,x:y])

当然,这只在列有序的情况下有效。

一个简单的解决方案是直接引用列,使用

sum(df[,x:y])

当然,这仅在列顺序正确的情况下才有效。

不能将
$
与字符串列名一起使用,但可以使用
[
。请参阅R-FAQ。不能将
$
与字符串列名一起使用,但可以使用
[
。请参阅R-FAQ。谢谢!这可能有效,但创建新列时不使用“$”我只知道
dplyr::mutate()
。但是,
mutate()
似乎不喜欢我使用
paste0()
来创建新的列名…(
mutate(
也不起作用)我能做什么?谢谢!@hpy我想
df[int2name(2:4,prefix=“Var”,suffix=“foo”)]谢谢!这可能有用,但要创建一个新列而不使用“$”,我只知道
dplyr::mutate()
。然而,
mutate()
似乎不喜欢我使用
paste0()
来创建新列的名称…(
mutate()
也不起作用)我能做什么?谢谢!@hpy我想
df[int2name(2:4,prefix=“Var”,suffix=“foo”)]