[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