2016-01-08 16 views
5
ID<-c("R1","R2","R2","R3","R3","R4","R4","R4","R4","R3","R3","R3","R3","R2","R2","R2","R5","R6") 
event<-c("a","b","b","M","s","f","y","b","a","a","a","a","s","c","c","b","m","a") 
df<-data.frame(ID,event) 

Jak zmienić poniższy kod, aby uzyskać tę tabelę. 2-W jaki sposób mogę uzyskać średnią częstotliwość dla każdego elementu częstotliwości? Na przykład: średnia częstotliwość dla a byłaby 1 + 3 + 1 + 1/4.Tabela częstotliwości z funkcją ddply

ddply(df,.(ID),summarise,N=sum(!is.na(ID)),frequency=length(event)) 

ID N Number-event-level levels  frequency 
R1 1  1     a    a=1 
R2 5  2     b,c   b=3,c=2 
R3 6  3     M,a,s  M=1,a=3,s=2 
R4 4  4     f,y,b,a f=1,y=1,b=1,a=1 
R5 1  1     m    m=1 
R6 1  1     a    a=1 
+0

Czy próbowałeś: 'ftable (DF)' – Badger

+0

Dzięki tak dużo za pomoc. – shoorideh

Odpowiedz

3

Oto odpowiedź na pytanie pierwsze:

ddply(df,.(ID),summarise, 
     N=length(event), 
     Number.event.level=length(unique(event)), 
     levels=paste(sort(unique(event)),collapse=","), 
     frequency=paste(paste(sort(unique(event)),table(event)[table(event)>0],sep="="),collapse=",")) 
# ID N Number.event.level levels  frequency 
# 1 R1 1     1  a    a=1 
# 2 R2 5     2  b,c   b=3,c=2 
# 3 R3 6     3 a,M,s  a=3,M=1,s=2 
# 4 R4 4     4 a,b,f,y a=1,b=1,f=1,y=1 
# 5 R5 1     1  m    m=1 
# 6 R6 1     1  a    a=1 

Na drugie pytanie wydaje się, że chcesz uzyskać średnią częstotliwość, gdy częstotliwość jest większa niż 0. Jeśli to przypadek, można to zrobić:

apply(table(df),2,function(x) mean(x[x>0])) 
# a b c f m M s y 
# 1.5 2.0 2.0 1.0 1.0 1.0 2.0 1.0 

Aktualizacja

Jeśli chcesz zrobić to ostatnia część dla każdego poziomu zmiennej trzeci i nadal chcesz używać ddply() można wykonać następujące czynności:

df1 <- rbind(df,df) 
df1$cat <- rep(c("a","b"),each=nrow(df)) 

ddply(df1,.(cat),function(y) apply(table(y),2,function(x) mean(x[x>0]))) 
# cat a b c f m M s y 
# 1 a 1.5 2 2 1 1 1 2 1 
# 2 b 1.5 2 2 1 1 1 2 1 
+0

Świetnie, wielkie dzięki – shoorideh

+0

Mam kolejne pytanie. Jak mogę zmodyfikować twoje rozwiązanie (część druga) Jeśli mam, trzy zmienne kategoryczne. Chcę obliczyć średnią zdarzenia (suma (zdarzenie)/liczba identyfikatorów) dla każdego poziomu trzeciej zmiennej. Chodzi mi o to, że chcę obliczyć zastosowanie (tabela (df $ ID, zdarzenie df $), 2, funkcja (x) średnia (x [x> 0])) dla każdego poziomu trzeciej zmiennej. – shoorideh

+0

Zobacz aktualizację powyżej. –

Powiązane problemy