dplyr:选择包含空格的列名

时间:2014-04-03 15:27:47

标签: r dataframe dplyr

df <- structure(list(`a a` = 1:3, `a b` = 2:4), .Names = c("a a", "a b"
), row.names = c(NA, -3L), class = "data.frame")

,数据看起来像

  a a a b
1   1   2
2   2   3
3   3   4

跟随电话选择

select(df, 'a a')

给出

Error in abs(ind[ind < 0]) : 
  non-numeric argument to mathematical function

如何使用select选择“a a”和/或将其重命名为无空格的内容?我知道以下方法:

  1. names(df)[1] <- "a"
  2. select(df, a=1)
  3. select(df, ends_with("a"))
  4. 但如果我正在处理大型数据集,如何在不知道索引数字或类似列名的情况下获得完全匹配?

3 个答案:

答案 0 :(得分:52)

您可以使用反引号select `变量。

select(df, `a a`)
#   a a
# 1   1
# 2   2
# 3   3

但是,如果您的主要目标是重命名该列,则可以在rename包中使用plyr,您可以同时使用""``。< / p>

rename(df, replace = c("a a" = "a"))
rename(df, replace = c(`a a` = "a"))

base R:

names(df)[names(df) == "a a"] <- "a"

有关使用各种引号的详细说明,请参阅?Quotes。 “名称和标识符”部分在此处特别相关:

  

如果引用它们,可以使用其他[语法无效]名称。首选的引用是反复“。

另请参阅?make.names有关有效名称的信息。

另请参阅this post有关在dplyr

中重命名的信息

答案 1 :(得分:2)

反引号的一些替代方案,dplyr 0.5.0很好,截至本文撰写时的当前版本。

如果您尝试以编程方式选择参数作为列,并且您不希望重命名或执行类似paste / sprintf列名称的反对,那么可以将as.nameselectselect_结合使用,即dplyr::select_(df, as.name("a a"))

dplyr

许多select函数都有非标准版本。对于one_of具体而言,您还可以将标准版本与选择助手?dplyr::select_helpers结合使用。有关文档,请参阅dplyr::select(df, dplyr::one_of("a a"))

{{1}}

答案 2 :(得分:0)

您可以在位于 Esc 下的“`”中锁定您的间隔变量。注意符号与 <'>

不同

a b\