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
将其重命名为无空格的东西? 我知道以下方法:
-
names(df)[1] <- "a"
-
select(df, a=1)
-
select(df, ends_with("a"))
但是如果我正在处理一个大型的数据集,我怎么能得到一个完全匹配而不知道索引数字或类似的列名?
你可以通过使用反引号来select
variables。
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"))