mutate - Aplicar group_by y resumir en datos mientras se mantiene toda la información de las columnas
funcion mutate en r (3)
Aquí hay dos opciones usando a) filter
yb) slice
de dplyr. En este caso, no hay valores mínimos duplicados en la columna c
para ninguno de los grupos, por lo que los resultados de a) yb) son los mismos. Si hubiera mínimos duplicados, el enfoque a) devolvería cada mínimo por grupo, mientras que b) solo devolvería un mínimo (el primero) en cada grupo.
un)
> data %>% group_by(b) %>% filter(c == min(c))
#Source: local data frame [4 x 4]
#Groups: b
#
# a b c d
#1 1 a 1.2 small
#2 4 b 1.7 larg
#3 6 c 3.1 med
#4 10 d 2.2 med
O similarmente
> data %>% group_by(b) %>% filter(min_rank(c) == 1L)
#Source: local data frame [4 x 4]
#Groups: b
#
# a b c d
#1 1 a 1.2 small
#2 4 b 1.7 larg
#3 6 c 3.1 med
#4 10 d 2.2 med
segundo)
> data %>% group_by(b) %>% slice(which.min(c))
#Source: local data frame [4 x 4]
#Groups: b
#
# a b c d
#1 1 a 1.2 small
#2 4 b 1.7 larg
#3 6 c 3.1 med
#4 10 d 2.2 med
Tengo un gran conjunto de datos con 22000 filas y 25 columnas. Intento agrupar mi conjunto de datos en función de una de las columnas y tomar el valor mínimo de la otra columna en función del conjunto de datos agrupado. Sin embargo, el problema es que solo me da dos columnas que contienen la columna agrupada y la columna que tiene el valor mínimo ... pero necesito toda la información de otras columnas relacionadas con las filas con los valores mínimos. Aquí hay un ejemplo simple para hacerlo reproducible:
data<- data.frame(a=1:10, b=c("a","a","a","b","b","c","c","d","d","d"), c=c(1.2, 2.2, 2.4, 1.7, 2.7, 3.1, 3.2, 4.2, 3.3, 2.2), d= c("small", "med", "larg", "larg", "larg", "med", "small", "small", "small", "med"))
d<- data %>%
group_by(b) %>%
summarise(min_values= min(c))
d
b min_values
1 a 1.2
2 b 1.7
3 c 3.1
4 d 2.2
Por lo tanto, necesito tener también la información relacionada con las columnas ayd, sin embargo, dado que tengo duplicaciones en los valores de la columna c, no puedo fusionarlos en función de la columna min_value ... Me preguntaba si hay alguna forma de mantener información de otras columnas cuando estamos usando el paquete dplyr.
He encontrado una explicación aquí " dplyr: group_by, subconjunto y resumir " y aquí " Encontrar porcentaje en un subgrupo usando group_by y resumir " pero ninguna de las direcciones es mi problema.
Puede usar group_by
sin summarize
:
data %>%
group_by(b) %>%
mutate(min_values = min(c)) %>%
ungroup()
Usando sqldf
:
library(sqldf)
# Two options:
sqldf(''SELECT * FROM data GROUP BY b HAVING min(c)'')
sqldf(''SELECT a, b, min(c) min, d FROM data GROUP BY b'')
Salida:
a b c d
1 1 a 1.2 small
2 4 b 1.7 larg
3 6 c 3.1 med
4 10 d 2.2 med