studio seleccionar promedio numero filas eliminar datos data contar r dataframe rowcount

seleccionar - contar el número de filas en un marco de datos en R basado en el grupo



promedio de filas en r (8)

Aquí hay otra forma de usar aggregate para contar filas por grupo:

my.data <- read.table(text = '' month.year my.cov Jan.2000 apple Jan.2000 pear Jan.2000 peach Jan.2001 apple Jan.2001 peach Feb.2002 pear '', header = TRUE, stringsAsFactors = FALSE, na.strings = NA) rows.per.group <- aggregate(rep(1, length(my.data$month.year)), by=list(my.data$month.year), sum) rows.per.group # Group.1 x # 1 Feb.2002 1 # 2 Jan.2000 3 # 3 Jan.2001 2

Esta pregunta ya tiene una respuesta aquí:

Tengo un marco de datos en R como este:

ID MONTH-YEAR VALUE 110 JAN. 2012 1000 111 JAN. 2012 2000 . . . . 121 FEB. 2012 3000 131 FEB. 2012 4000 . . . .

Por lo tanto, para cada mes de cada año hay n filas y pueden estar en cualquier orden (es decir, no todas están en continuidad y están en pausas). Quiero calcular cuántas filas hay para cada MONTH-YEAR es decir, cuántas filas hay para JAN. 2012, cuántos para FEB. 2012 y así sucesivamente. Algo como esto:

MONTH-YEAR NUMBER OF ROWS JAN. 2012 10 FEB. 2012 13 MAR. 2012 6 APR. 2012 9

Traté de hacer esto:

n_row <- nrow(dat1_frame %.% group_by(MONTH-YEAR))

pero no produce la salida deseada. ¿Cómo puedo hacer eso?


Aquí hay un ejemplo que muestra cómo la table(.) (O, más cercanamente coincidente con su salida deseada, data.frame(table(.)) Hace lo que parece que está pidiendo.

Tenga en cuenta también cómo compartir datos de muestra reproducibles de forma que otros puedan copiar y pegar en su sesión.

Aquí están los datos de muestra (reproducibles):

mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L), MONTH.YEAR = c("JAN. 2012", "JAN. 2012", "FEB. 2012", "FEB. 2012", "MAR. 2012"), VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)), .Names = c("ID", "MONTH.YEAR", "VALUE"), class = "data.frame", row.names = c(NA, -5L)) mydf # ID MONTH.YEAR VALUE # 1 110 JAN. 2012 1000 # 2 111 JAN. 2012 2000 # 3 121 FEB. 2012 3000 # 4 131 FEB. 2012 4000 # 5 141 MAR. 2012 5000

Aquí está el cálculo del número de filas por grupo, en dos formatos de visualización de salida:

table(mydf$MONTH.YEAR) # # FEB. 2012 JAN. 2012 MAR. 2012 # 2 2 1 data.frame(table(mydf$MONTH.YEAR)) # Var1 Freq # 1 FEB. 2012 2 # 2 JAN. 2012 2 # 3 MAR. 2012 1


Intenta usar la función de conteo en dplyr:

library(dplyr) dat1_frame %>% count(MONTH.YEAR)

No estoy seguro de cómo obtuviste MES-AÑO como nombre de variable. Mi versión R no permite ese nombre de variable, así que lo reemplacé con MONTH.YEAR.

Como nota al margen, el error en su código fue que dat1_frame %.% group_by(MONTH-YEAR) sin una función de summarise devuelve el marco de datos original sin ninguna modificación. Entonces, quieres usar

dat1_frame %>% group_by(MONTH.YEAR) %>% summarise(count=n())


La función count() en plyr hace lo que quiere:

library(plyr) count(mydf, "MONTH-YEAR")


Solo para completar la solución data.table:

library(data.table) mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L), MONTH.YEAR = c("JAN. 2012", "JAN. 2012", "FEB. 2012", "FEB. 2012", "MAR. 2012"), VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)), .Names = c("ID", "MONTH.YEAR", "VALUE"), class = "data.frame", row.names = c(NA, -5L)) setDT(mydf) mydf[, .(`Number of rows` = .N), by = MONTH.YEAR] MONTH.YEAR Number of rows 1: JAN. 2012 2 2: FEB. 2012 2 3: MAR. 2012 1


Supongamos que tenemos un marco de datos df_data como se muestra a continuación

> df_data ID MONTH-YEAR VALUE 1 110 JAN.2012 1000 2 111 JAN.2012 2000 3 121 FEB.2012 3000 4 131 FEB.2012 4000 5 141 MAR.2012 5000

Para contar el número de filas en df_data agrupadas por columna MONTH-YEAR, puede usar:

> summary(df_data$`MONTH-YEAR`) FEB.2012 JAN.2012 MAR.2012 2 2 1

la función de resumen creará una tabla a partir del argumento factor, luego creará un vector para el resultado (líneas 7 y 8)


Utilizando el conjunto de datos de ejemplo que Ananda modificó, aquí hay un ejemplo que usa aggregate() , que es parte del núcleo R. aggregate() solo necesita algo para contar como función de los diferentes valores de MONTH-YEAR . En este caso, utilicé VALUE como lo que se debe contar:

aggregate(cbind(count = VALUE) ~ MONTH.YEAR, data = mydf, FUN = function(x){NROW(x)})

que te da ...

MONTH.YEAR count 1 FEB. 2012 2 2 JAN. 2012 2 3 MAR. 2012 1


library(plyr) ddply(data, .(MONTH-YEAR), nrow)

Esto le dará la respuesta, si "MONTH-YEAR" es una variable. Primero, intente con unique (data $ MONTH-YEAR) y vea si devuelve valores únicos (sin duplicados).

Luego, por encima de simple split-apply-combine devolverá lo que está buscando.