ver una tablas ordenar nombres nombre mover filtros datos data como columnas columna cambiarle agrupar r group-by columnname dplyr

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 ()).