2016-01-08 21 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) 

このテーブルを取得するには、以下のコードを変更します。 2 - どのように周波数の各要素の周波数の平均を得ることができますか?たとえば、aの頻度の平均は1 + 3 + 1 + 1/4になります。ここで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

あなたが試してみました: 'ftable(DF)' – Badger

+0

本当にありがとうございましたがあなたの助けに。 – shoorideh

答えて

3

は、最初の質問の答えです:あなたの2番目の質問については

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 

あなたがその場合は周波数が0より大きい場合、平均周波数を取得したいのように、それはそうです、

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 

更新

:あなたはこれを行うことができます0

あなたは3番目の変数のレベルごとにその最後の部分をしたいとあなたはまだあなたが次の操作を行うことができddply()使用したい場合:

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

すごく、ありがとうございます – shoorideh

+0

私は別の質問があります。ソリューションを修正するにはどうすればいいですか(2番目の部分)私には3つのカテゴリ変数があります。私は、第3変数の各レベルのイベントの平均(合計(イベント)/ IDの数)を計算したいと思います。つまり、第3の変数の各レベルに対してapply(table(df $ ID、df $ event)、2、function(x)mean(x [x> 0)))を計算したいと思います。 – shoorideh

+0

上記の更新を参照してください。 –

関連する問題