mutate - Obtenga el conteo de dplyr de forma clara y legible
mutate_at dplyr (1)
¿Qué tal esta opción?
data %>% # take the data.frame "data"
filter(!is.na(aa)) %>% # Using "data", filter out all rows with NAs in aa
group_by(bb) %>% # Then, with the filtered data, group it by "bb"
summarise(Unique_Elements = n_distinct(aa)) # Now summarise with unique elements per group
#Source: local data frame [3 x 2]
#
# bb Unique_Elements
#1 a 2
#2 b 1
#3 c 1
Use el filter
para filtrar las filas donde a tiene NA, luego agrupe los datos por columna bb
y luego resuma contando el número de elementos únicos de la columna aa
por grupo de bb
.
Como puede ver, estoy usando el operador de tubería %>%
que puede usar para "conectar" o "encadenar" comandos al usar dplyr. Esto le ayuda a escribir un código fácil de leer porque es más natural, por ejemplo, escribe el código de la izquierda para escribir y de arriba a abajo y no anidado profundamente desde dentro (como en su código de ejemplo).
Editar:
En la primera parte de su pregunta, usted escribió:
Sé que puedo hacer cosas como:
by_bb<-group_by(data, bb, add = TRUE) summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))
Aquí hay otra opción para hacer eso (aplicando varias funciones a la (s) misma (s) columna (s)):
data %>%
filter(!is.na(aa)) %>%
group_by(bb) %>%
summarise_each(funs(mean, max, sum, n_distinct), aa)
#Source: local data frame [3 x 5]
#
# bb mean max sum n_distinct
#1 a 2 3 4 2
#2 b 2 2 2 1
#3 c 4 4 4 1
Soy nuevo usando dplyr, necesito calcular los distintos valores en un grupo. Aquí hay un ejemplo de tabla:
data=data.frame(aa=c(1,2,3,4,NA), bb=c(''a'', ''b'', ''a'', ''c'', ''c''))
Sé que puedo hacer cosas como:
by_bb<-group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))
Pero si quiero contar los elementos únicos?
Puedo hacer:
> summarise(by_bb,length(unique(unlist(aa))))
bb length(unique(unlist(aa)))
1 a 2
2 b 1
3 c 2
y si quiero excluir las NA, puedo hacerlo:
> summarise(by_bb,length(unique(unlist(aa[!is.na(aa)]))))
bb length(unique(unlist(aa[!is.na(aa)])))
1 a 2
2 b 1
3 c 1
Pero es un poco ilegible para mí . ¿Hay una mejor manera de hacer este tipo de resumen?