[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