Pregunta Nombre de columna con corchetes u otras puntuaciones para dplyr group_by


Tengo un marco de datos importado que tiene nombres de columna con varias puntuaciones, incluidos paréntesis, por ejemplo. BILLNG.STATUS.(COMPLETED./.INCOMPLTE) .

Estaba tratando de usar group_by de dplyr hacer un resumen, algo así como

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

lo que trae el error Error in mutate_impl(.data, dots) : could not find function "BILLNG.STATUS."

Aparte de cambiar los nombres de columna, ¿hay una manera de manejar dichos nombres de columna directamente en group_by ?


5
2018-01-27 03:06


origen


Respuestas:


Creo que puedes hacer que esto funcione si encierras los nombres de columna "ilegales" en backticks. Por ejemplo, digamos que comienzo con este marco de datos (llamado df)

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

Entonces puedo resumirlo así:

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

Dando:

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

Backticks también son útiles para referirse o crear nombres de variables con espacios en blanco. Usted puede encontrar una serie de preguntas relacionadas con dplyr y backticks en SO, y también hay un poco de discusión sobre backticks en la ayuda para Quotes.


13
2018-01-27 03:53



Solo estoy usando esta no-respuesta como contra-ejemplo o ilustración de limitaciones para el método de retroceso. (Fue la primera estrategia que probé. Tal vez sea el hecho de que dos operaciones de lenguaje ("(" y "/") se estén manejando de forma adyacente lo que hace que esto falle).

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

Intenté una variedad u otros esfuerzos orientados al lenguaje con quote, as.name y substitute eso también falló (Desearía que hubiera un mecanismo para solicitar que esto se hundiera hasta el final de las respuestas).


2
2018-01-27 04:39