una - especifique los nombres de columna dplyr
tablas en r (5)
Acabo de dar una respuesta similar en Grupo por varias columnas en dplyr, usando la entrada de vector de cadena , pero en buena medida: las funciones que le permiten operar en columnas mediante cadenas se han agregado a dplyr
. Estos tienen el mismo nombre que las funciones regulares de dplyr
, pero terminan en un guión bajo. Las funciones se describen en detalle en esta viñeta .
Dado df
y someColumn
del OP, esto ahora funciona bien:
gdf <- df %>% group_by_(someColumn) %>% summarise(m1=mean(V1),m2=mean(V2),m3=mean(V3))
Tenga en cuenta que es group_by_
, en lugar de group_by
, y el operador %>%
se usa como %.%
Está en desuso.
Esta pregunta ya tiene una respuesta aquí:
¿Cómo puedo pasar los nombres de las columnas a dplyr si no conozco el nombre de la columna, pero quiero especificarlo a través de una variable?
Por ejemplo, esto funciona:
require(dplyr)
df <- as.data.frame(matrix(seq(1:9),ncol=3,nrow=3))
df$group <- c("A","B","A")
gdf <- df %.% group_by(group) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
Pero esto no
require(dplyr)
someColumn = "group"
df <- as.data.frame(matrix(seq(1:9),ncol=3,nrow=3))
df$group <- c("A","B","A")
gdf <- df %.% group_by(someColumn) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
Aquí hay una respuesta a esta pregunta directa, obtenida al elegir la solución de hadley a su duplicidad publicada.
gdf <- df %.% regroup( lapply( someColumn, as.symbol)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
FWIW, mi caso de uso involucró la agrupación por una columna variable y una columna constante. La solución a eso es:
gdf <- df %.% regroup( lapply( c( ''constant_column'', someColumn), as.symbol)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
Finalmente, la solución de eval
publicada no funciona. Eso solo hace una nueva columna cuyos valores son todos los que someColumn
. Todavía no soy lo suficientemente bueno como para dejar un comentario o votarlo a la baja.
Espero que solo tengas que usar eval
require(dplyr)
someColumn = "group"
df <- as.data.frame(matrix(seq(1:9),ncol=3,nrow=3))
df$group <- c("A","B","A")
gdf <- df %.% group_by(eval(someColumn)) %.% summarise(m1 =mean(V1),m2 =mean(V2),m3 =mean(V3))
Puedes usar el resumen de la siguiente manera:
plotVar = "Stocks_US_TotalCrudeOil"
dfBand <- mydf[ c( plotVar , "year", "week" ) ] %>%
filter ( year %in% bandYears ) %>%
group_by ( week ) %>%
summarise_ ( ymini = paste( "min(" , as.name(plotVar) ,")" )
, ymaxi = paste( "max(" , as.name(plotVar) ,")" ) )
dfBand
pollutant <- "sulfate"
summarise(data, mean(eval(as.symbol(pollutant)), na.rm = TRUE))
Estaba tratando de hacer la misma pregunta por mi propio problema. Entonces encontré una solución para ello. Encapsulo la expresión con eval (as.symbol ()).