63
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

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

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

但是如果我正在处理一个大型数据集,我如何在不知道索引号或类似列名的情况下获得完全匹配?

4

3 回答 3

74

您可以select使用反引号来更改变量`

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

但是,如果您的主要目标是重命名列,则可以使用renamein plyrpackage,其中可以同时使用""``

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

或在baseR 中:

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

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

可以使用其他 [syntactically invalid] 名称,只要它们被引用。首选报价是反引号”。

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

另见这篇关于重命名的帖子dplyr

于 2014-04-03T15:33:58.900 回答
4

反引号的一些替代品,从 dplyr 0.5.0 开始,这是撰写本文时的当前版本。

如果您尝试以编程方式选择一个参数作为列,并且您不想重命名或将列名paste/sprintf列名改为反引号,则可以as.name与 的非标准评估版本结合使用select,即select_

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

许多dplyr功能都有非标准版本。在select具体情况下,您还可以将标准版本与 select helper 结合使用one_of。请参阅?dplyr::select_helpers文档:

dplyr::select(df, dplyr::one_of("a a"))
于 2016-10-03T21:18:44.820 回答
-1

您可以将间隔变量锁定在 Esc 下的“`”中。请注意,该符号与 <'> 不同

a b\

于 2021-05-17T14:55:50.010 回答