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

时间:2015-01-27 03:06:36

标签: r dplyr

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

我试图使用group_by中的dplyr进行一些总结,例如

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

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

如果不更改列名,是否可以直接在group_by中处理此类列名?

2 个答案:

答案 0 :(得分:13)

如果你附上&#34;非法&#34;我认为你可以做到这一点。反引号中的列名。例如,我们假设我从这个数据框开始(称为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帮助中的反引号的讨论。

答案 1 :(得分:2)

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

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失败的各种或其他面向语言的工作。 (我希望有一种机制可以要求将这个问题放到答案的底部。)