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 <[email protected]> : > 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 <[email protected]> > *Enviado: *jueves, 12 de mayo de 2016 18:50 > *Para: *[email protected] > *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 > > [email protected] > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
