tabla studio recodificar porcentajes para intervalos frecuencias frecuencia estadistica descriptiva datos crear comandos clase agrupados r

studio - Cuenta de frecuencia de dos columnas en R



tabla de frecuencia para datos agrupados en r (6)

Tengo dos columnas en el marco de datos

2010 1 2010 1 2010 2 2010 2 2010 3 2011 1 2011 2

Quiero contar la frecuencia de ambas columnas y obtener el resultado en este formato

y m Freq 2010 1 2 2010 2 2 2010 3 1 2011 1 1 2011 2 1


No he visto una respuesta dplyr todavía. El código es bastante simple.

library(dplyr) rename(count(df, y, m), Freq = n) # Source: local data frame [5 x 3] # Groups: V1 [?] # # y m Freq # (int) (int) (int) # 1 2010 1 2 # 2 2010 2 2 # 3 2010 3 1 # 4 2011 1 1 # 5 2011 2 1

Datos:

df <- structure(list(y = c(2010L, 2010L, 2010L, 2010L, 2010L, 2011L, 2011L), m = c(1L, 1L, 2L, 2L, 3L, 1L, 2L)), .Names = c("y", "m" ), class = "data.frame", row.names = c(NA, -7L))


Si sus datos son dataframe df con columnas y y m

library(plyr) counts <- ddply(df, .(df$y, df$m), nrow) names(counts) <- c("y", "m", "Freq")


Si tenía un marco de datos muy grande con muchas columnas o no conocía los nombres de las columnas de antemano, algo como esto podría ser útil:

library(reshape2) df_counts <- melt(table(df)) names(df_counts) <- names(df) colnames(df_counts)[ncol(df_counts)] <- "count" df_counts y m count 1 2010 1 2 2 2011 1 1 3 2010 2 2 4 2011 2 1 5 2010 3 1 6 2011 3 0


Una versión de la tabla de datos más idiomática de la respuesta de @ugh sería:

library(data.table) # load package df <- data.frame(y = c(rep(2010, 5), rep(2011,2)), m = c(1,1,2,2,3,1,2)) # setup data dt <- data.table(df) # transpose to data.table dt[, list(Freq =.N), by=list(y,m)] # use list to name var directly


Utilizando sqldf :

sqldf("SELECT y, m, COUNT(*) as Freq FROM table1 GROUP BY y, m")


library(data.table) oldformat <- data.table(oldformat) ## your orignal data frame newformat <- oldformat[,list(Freq=length(m)), by=list(y,m)]