我有一个导入的数据框,其列名具有各种标点符号,包括括号,例如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
中处理此类列名?
答案 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
尝试了quote
,as.name
和substitute
失败的各种或其他面向语言的工作。 (我希望有一种机制可以要求将这个问题放到答案的底部。)