sumarlos sumar repetidos rangos por filas esquematizar esquemas esquema duplicados datos crear crea como combinar automatico agrupar r

sumar - crear esquemas en excel



Agregue filas(recuento) que coincidan con una condición, agrupar por valores únicos (4)

Aquí hay otro enfoque:

a <- data.frame(id=1:10, contact=sample(c("peter", "sahrah"), 10, T), contactGrp=sample(c("west", "east"), 10, T), relpos=sample(0:1, 10, T), maxpos=runif(10, 0,10)) library(sqldf) sqldf("Select contactGrp, count(*) as cnt from a where relpos=0 and maxpos > 1 Group by contactGrp") contactGrp cnt 1 east 3 2 west 1

Parece un problema tan simple, pero me he estado arrancando el pelo tratando de hacer que esto funcione:

Dado este marco de datos que identifica las interacciones que el id tuvo con el contact que está agrupado por contactGrp ,

head(data) id sesTs contact contactGrp relpos maxpos 1 6849 2012-06-25 15:58:34 peter west 0.000000 3 2 6849 2012-06-25 18:24:49 sarah south 0.500000 3 3 6849 2012-06-27 00:13:30 sarah south 1.000000 3 4 1235 2012-06-29 17:49:35 peter west 0.000000 2 5 1235 2012-06-29 23:56:35 peter west 1.000000 2 6 5893 2012-06-30 22:21:33 carl east 0.000000 1

¿Cuántos contactos hay para unique(data$contactGrp) con relpos=1 y maxpos>1 ?

Un resultado esperado sería:

1 west 1 2 south 1 3 east 0

Un pequeño subconjunto de líneas que he intentado:

  • aggregate(data, by=list(''contactGrp''), FUN=count) produce un error, sin filtrado
  • El uso de data.table parece requerir una clave, que no es única en estos datos ...
  • ddply(data,"contactGrp",summarise,count=???) no está seguro de qué función usar para completar la columna de count
  • ddply(subset(data,maxpos>1 & relpos==0), c(''contactGrp''), function(df)count(df$relpos)) funciona pero me da una columna extra x y se siente como si hubiera complicado demasiado eso…

SQL sería fácil: Select contactGrp, count(*) as cnt from data where … Group by contactGrp pero estoy intentando aprender R


Creo que esta es la versión ddply que estás buscando:

ddply(sessions,.(contactGrp), summarise, count = length(contact[relpos == 0 & maxpos > 1]))


Su primer intento de línea con agregado no funciona porque no hay un count funciones. Te refieres a la length . Todo lo que tenía que hacer era ejecutar eso con la selección de datos condicionales para relpos y maxpos, y también seleccionar una variable ficticia para obtener el recuento de (no importa cuál). Sin embargo, en lugar de usar comandos de agregación flexibles de varios tipos, el comando de table integrado está diseñado solo para esto.

with( data[data$relpos == 1 & data$maxpos > 1,], table(contactGrp) )


Y aquí está la solución data.table :

> library(data.table) > dt <- data.table(sessions) > dt[, length(contact[relpos == 0 & maxpos > 1]), by = contactGrp] contactGrp V1 [1,] west 2 [2,] south 0 [3,] east 0 > dt[, length(contact[relpos == 1 & maxpos > 1]), by = contactGrp] contactGrp V1 [1,] west 1 [2,] south 1 [3,] east 0