dplyr:select包含空格的列名

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

和数据看起来像

  aaab 1 1 2 2 2 3 3 3 4 

以下来电select

 select(df, 'a a') 

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

如何select“aa”和/或使用select将其重命名为无空格的东西? 我知道以下方法:

  1. names(df)[1] <- "a"
  2. select(df, a=1)
  3. select(df, ends_with("a"))

但是如果我正在处理一个大型的数据集,我怎么能得到一个完全匹配而不知道索引数字或类似的列名?

你可以通过使用反引号来selectvariables。

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

但是,如果您的主要目标是重命名列,您可以在plyr软件包中使用rename ,在其中可以同时使用""``

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

或在base R:

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

有关使用各种引用的更全面的描述,请参阅?Quotes 。 “名称和标识符”部分在这里特别相关:

其他[语法无效]名称可以使用,只要它们被引用。 首选的引用是反向“。

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

另请参阅有关在dplyr重命名的dplyr

反引号的一些替代方法,截至本文的最新版本dplyr 0.5.0。

如果你想以编程的方式select一个参数作为一个列,你不想重命名或者做一些像paste / sprintf列名一样的反引号,你可以使用as.name连同非标准的评估版本select ,这是select_

 dplyr::select_(df, as.name("aa")) 

许多dplyr函数都有非标准版本。 在具体select的情况下,您也可以将标准版本与select助手one_of一起使用。 请参阅?dplyr::select_helpers以获取文档:

 dplyr::select(df, dplyr::one_of("aa"))