libreria funcion filtrar filas extraer eliminar datos data columnas agrupar r aggregate

funcion - data.frame Agrupar por columna



funcion select en r (4)

Esta pregunta ya tiene una respuesta aquí:

Tengo un marco de datos DF.

Digamos que DF es:

A B 1 1 2 2 1 3 3 2 3 4 3 5 5 3 6

Ahora quiero combinar las filas de la columna A y tener la suma de la columna B.

Por ejemplo:

A B 1 1 5 2 2 3 3 3 11

Estoy haciendo esto actualmente usando una consulta SQL con la función sqldf. Pero por alguna razón es muy lento. ¿Hay alguna manera más conveniente de hacer eso? También podría hacerlo manualmente usando un bucle for, pero nuevamente es lento. Mi consulta SQL es "Seleccione A, Recuento (B) del grupo DF por A".

En general, cuando no uso operaciones vectorizadas y uso para bucles, el rendimiento es extremadamente lento incluso para procedimientos individuales.


Esta es una pregunta común. En base, la opción que está buscando es el aggregate . Suponiendo que su data.frame se llama "mydf", puede usar lo siguiente.

> aggregate(B ~ A, mydf, sum) A B 1 1 5 2 2 3 3 3 11

También recomendaría buscar en el paquete "data.table".

> library(data.table) > DT <- data.table(mydf) > DT[, sum(B), by = A] A V1 1: 1 5 2: 2 3 3: 3 11


Recomendaría echar un vistazo al paquete plyr . Puede que no sea tan rápido como data.table u otros paquetes, pero es bastante instructivo, especialmente cuando se comienza con R y se tiene que hacer algo de manipulación de datos.

> DF <- data.frame(A = c("1", "1", "2", "3", "3"), B = c(2, 3, 3, 5, 6)) > library(plyr) > DF.sum <- ddply(DF, c("A"), summarize, B = sum(B)) > DF.sum A B 1 1 5 2 2 3 3 3 11


Utilizando dplyr :

require(dplyr) df <- data.frame(A = c(1, 1, 2, 3, 3), B = c(2, 3, 3, 5, 6)) df %>% group_by(A) %>% summarise(B = sum(B)) ## Source: local data frame [3 x 2] ## ## A B ## 1 1 5 ## 2 2 3 ## 3 3 11

Con sqldf :

library(sqldf) sqldf(''SELECT A, SUM(B) AS B FROM df GROUP BY A'')


require(reshape2) T <- melt(df, id = c("A")) T <- dcast(T, A ~ variable, sum)

No estoy seguro de las ventajas exactas sobre el agregado.