[R-es] Division entre el numero de ocurrencias parciales y totales dentro de un DataFrame de manera eficiente

Toni Massó Jou tmassojou en gmail.com
Jue Mayo 12 23:50:09 CEST 2016


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]]



Más información sobre la lista de distribución R-help-es