[R-es] Division entre el numero de ocurrencias parciales y totalesdentro de un DataFrame de manera eficiente
Toni Massó Jou
tmassojou en gmail.com
Vie Mayo 13 10:54:59 CEST 2016
Hola:
Aplicaré lo que dices de usar data.table.
Sobre hacer for, etc. Ya lo he hecho, pero pensaba que usar dplyr haría la
tarea más rápida por estar este implementado en C (si no me equivoco).
Siempre que puedo utilizo estas funciones, porque codificas menos y van más
rápido. En este caso el problema es que no he encontrado la manera de hacer
lo que quiero con dplyr o similar. La idea era al final comparar
rendimientos...
Muchas gracias Javier! ;)
2016-05-12 23:59 GMT+02:00 Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com>
:
> Estimado Tomi Massó Jou
>
>
>
> Pienso en dos partes, la primera, para ser optimizado debería trabajar con
> vectores. En todo caso con for, if.
>
>
>
> Lo segundo que pienso, usted dice que va a tener muchos datos, ¿Qué pasa
> si en lugar de data.frame intenta con data.table?
>
>
>
> Javier Rubén Marcuzzi
>
>
>
> *De: *Toni Massó Jou <tmassojou en gmail.com>
> *Enviado: *jueves, 12 de mayo de 2016 18:50
> *Para: *r-help-es en r-project.org
> *Asunto: *[R-es] Division entre el numero de ocurrencias parciales y
> totalesdentro de un DataFrame de manera eficiente
>
>
>
> Hola:
>
>
>
> A ver si me podéis ayudar que estoy atascado...
>
>
>
> Necesito contar los subcasos de la columna 2 de un dataframe respecto a los
>
> casos de la columna 1.
>
>
>
> Es decir, tengo un data.frame
>
>
>
> a<-c(rep(c('a','b','c','b','c'),3),'b')
>
> b<-c(rep(c('x','y','z','w'),4))
>
> c<-c(rep(c(1,1,0,0),4))
>
> df1<-data.frame(a,b,c,stringsAsFactors = FALSE)
>
>
>
>
>
> Y necesito contar los casos donde aparece "a" y "x" y dividirlo por el
>
> total de filas con primera columna=a. ,
>
>
>
>
>
>
>
> df1:
>
> > df1
>
> a b
>
> 1 a x
>
> 2 b y
>
> 3 c z
>
> 4 b w
>
> 5 c x
>
> 6 a y
>
> 7 b z
>
> 8 c w
>
> 9 b x
>
> 10 c y
>
> 11 a z
>
> 12 b w
>
> 13 c x
>
> 14 b y
>
> 15 c z
>
> 16 b w
>
>
>
> Si hago
>
> df2<-df1%>%group_by(a)%>%count(a,b,c)
>
> df3<-df1%>%group_by(a)%>%count(a)
>
>
>
> en el df2:
>
> a b n
>
> (chr) (chr) (int)
>
> 1 a x 1
>
> 2 a y 1
>
> 3 a z 1
>
> 4 b w 3
>
> 5 b x 1
>
> 6 b y 2
>
> 7 b z 1
>
> 8 c w 1
>
> 9 c x 2
>
> 10 c y 1
>
> 11 c z 2
>
>
>
> Necesito transformarlo en:
>
>
>
> a b n
>
> (chr) (chr) (int)
>
> 1 a x 1/3
>
> 2 a y 1/3
>
> 3 a z 1/3
>
> 4 b w 3/7
>
> 5 b x 1/7
>
> 6 b y 2/7
>
> 7 b z 1/7
>
> 8 c w 1/6
>
> 9 c x 2/6
>
> 10 c y 1/6
>
> 11 c z 2/6
>
>
>
>
>
> donde 1/3 es el número de filas con valor (a,x)/totalvalores a.
>
>
>
> En fin, no se si me explico.
>
>
>
> El problema que tengo es que voy a tener muchisimas filas con pocas
>
> repeticiones, y no consigo hacer algo minimamente eficiente (y ya no
>
> digamos elegante).
>
>
>
> Muchas gracias por vuestro tiempo!
>
>
>
> Att. Toni
>
>
>
> [[alternative HTML version deleted]]
>
>
>
> _______________________________________________
>
> R-help-es mailing list
>
> R-help-es en r-project.org
>
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es