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
用 quote
、as.name
和 substitute
尝试了各种或其他面向语言的努力,但都失败了。 (我希望有一种机制可以要求将此沉到答案的底部。)
我有一个导入的数据框,其中的列名带有各种标点符号,包括括号,例如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
用 quote
、as.name
和 substitute
尝试了各种或其他面向语言的努力,但都失败了。 (我希望有一种机制可以要求将此沉到答案的底部。)