mutate ifelse how funcion cheatsheet r dplyr

ifelse - dplyr: coloca las ocurrencias de conteo en una nueva variable



mutate dplyr (4)

Dos alternativas:

1: con base R:

# option 1: df$count <- ave(df$var1, df$var1, df$group, FUN = length) # option 2: df <- transform(df, count = ave(var1, var1, group, FUN = length))

lo que da:

> df group var1 count 1 1 1 4 2 1 1 4 3 1 1 4 4 1 1 4 5 1 2 1 6 2 1 1 7 2 2 3 8 2 2 3 9 2 2 3 10 2 3 1

2: con data.table :

library(data.table) setDT(df)[, count:=.N, by = .(group, var1)]

lo que da el mismo resultado:

> df group var1 count 1: 1 1 4 2: 1 1 4 3: 1 1 4 4: 1 1 4 5: 1 2 1 6: 2 1 1 7: 2 2 3 8: 2 2 3 9: 2 2 3 10: 2 3 1

Si quieres resumir, puedes usar:

# with base R: aggregate(id ~ group + var1, transform(df, id = 1), length) # with ''dplyr'': count(df, group, var1) # with ''data.table'': setDT(df)[, .N, by = .(group, var1)]

Me gustaría obtener una mano en el código dplyr, pero no puedo resolver esto. He visto un problema similar descrito aquí para muchas variables ( resumen de los recuentos de un factor con dplyr y Poniendo los recuentos en fila de las ocurrencias de valores en nuevas variables, ¿cómo hacerlo en R con dplyr? ), Sin embargo, mi tarea es algo más pequeña.
Dado un marco de datos, ¿cómo cuento la frecuencia de una variable y la coloco en una nueva variable?

set.seed(9) df <- data.frame( group=c(rep(1,5), rep(2,5)), var1=round(runif(10,1,3),0))

Entonces nosotros tenemos:

>df group var1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 2 6 2 1 7 2 2 8 2 2 9 2 2 10 2 3

Quisiera una tercera columna que indique por grupo ( group ) cuántas veces ocurre var1 , en este ejemplo sería: count = (4,4,4,4,1,1,3,3,3,1). Intenté, sin éxito, cosas como:

df %>% group_by(group) %>% rowwise() %>% do(count = nrow(.$var1))

Las explicaciones son muy apreciadas!


Probablemente utilicemos otra función útil de dplyr

df %>% group_by(group, var1) %>% tally() # Source: local data frame [5 x 3] # Groups: group # # group var1 n # 1 1 1 4 # 2 1 2 1 # 3 2 1 1 # 4 2 2 3 # 5 2 3 1


Quizás esta sea una nueva funcionalidad, pero se puede hacer con un comando dplyr :

df %>% add_count(group, var1) group var1 n 1 1 1 4 2 1 1 4 3 1 1 4 4 1 1 4 5 1 2 1 6 2 1 1 7 2 2 3 8 2 2 3 9 2 2 3 10 2 3 1


Todo lo que necesita hacer es agrupar sus datos por ambas columnas, "grupo" y "var1":

df %>% group_by(group, var1) %>% mutate(count = n()) #Source: local data frame [10 x 3] #Groups: group, var1 # # group var1 count #1 1 1 4 #2 1 1 4 #3 1 1 4 #4 1 1 4 #5 1 2 1 #6 2 1 1 #7 2 2 3 #8 2 2 3 #9 2 2 3 #10 2 3 1

Editar después de comentar

Aquí hay un ejemplo de cómo NO DEBES HACERLO:

df %>% group_by(group, var1) %>% do(data.frame(., count = length(.$group)))

La implementación de dplyr con n() es, por supuesto, mucho más rápida, más limpia y más corta, y siempre se debe preferir a las implementaciones anteriores.