dplyr 的带括号或其他标点符号的列名 group_by

column name with brackets or other punctuations for dplyr group_by

我有一个导入的数据框,其中的列名带有各种标点符号,包括括号,例如BILLNG.STATUS.(COMPLETED./.INCOMPLTE) .

我试图使用 dplyr 中的 group_by 来做一些总结,比如

df <- df %>% group_by(ORDER.NO, BILLNG.STATUS.(COMPLETED./.INCOMPLTE))

这会带来错误 Error in mutate_impl(.data, dots) : could not find function "BILLNG.STATUS."

如果不更改列名,有没有办法直接在 group_by 中处理此类列名?

我认为,如果将 "illegal" 列名称括在反引号中,就可以完成这项工作。例如,假设我从这个数据框开始(称为 df):

  BILLING.STATUS.(COMPLETED./.INCOMPLETE) ORDER.VALUE.(USD)
1                                       A        0.01544196
2                                       A        0.95522706
3                                       B        1.13479303
4                                       B        1.22848285

那么我可以这样总结:

dat %>% group_by(`BILLING.STATUS.(COMPLETED./.INCOMPLETE)`) %>% 
  summarise(count=n(),
            mean = mean(`ORDER.VALUE.(USD)`))

给予:

  BILLING.STATUS.(COMPLETED./.INCOMPLETE) count      mean
1                                       A     2 0.4853345
2                                       B     2 1.1816379

反引号在引用或创建带有空格的变量名时也很方便。您可以在 SO 上找到许多与 dplyr 和反引号相关的问题,并且在 Quotes.

的帮助中也有一些关于反引号的讨论

我只是将这个非答案用作反引号方法的反例或限制说明。 (这是我尝试的第一个策略。也许是两个语言操作(“(”和“/”)相邻处理的事实导致失败。)

names(iris)[5] <- "Specie(/)s"
library(dplyr)
by_species <- iris %>% group_by(`Specie(/)s`)
by_species %>% summarise_each(funs(mean(., na.rm = TRUE)))
#Error: cannot modify grouping variable

quoteas.namesubstitute 尝试了各种或其他面向语言的努力,但都失败了。 (我希望有一种机制可以要求将此沉到答案的底部。)