我有一個長格式的數據框,其中行代表不同人的響應(四類之一)。一個例子的數據集在這裏提供:自舉ggplot2中的比例(因子級別)
df <- data.frame(person=c(rep("A",100),rep("B",100)),resp=c(sample(4,100,replace=TRUE),sample(4,100,replace=TRUE)))
df$resp <- factor(df$resp)
summary(df)
person resp
A:100 1:52
B:100 2:55
3:54
4:39
,我要提供一個圖表,其中x軸繪出了響應類別,y軸示出了響應在一個類別比例,並且其中誤差條通過計算自舉(採樣替換)。
我可以計算出的比例(以極其缺憾的方式,我敢肯定,這可以改善,但是這不是我的主要關注):
pFrame <- ddply(df,.(person,resp),summarise,trials = length(resp))
# can't figure out how to calculate the proportion with plyr.
pFrame$prop <- NA
people <- unique(df$person)
responses <- unique(df$resp)
for (i in 1 : length(people)){
nTrials <- nrow(subset(df,person==people[i]))
for (j in 1 : 4){
pFrame$prop[pFrame$person==people[i] & pFrame$resp==responses[j]] <- pFrame$trials[pFrame$person==people[i] & pFrame$resp==responses[j]]/nTrials
}
}
,並繪製它:
ggplot(pFrame,aes(x=resp,y=prop,colour=person)) + geom_point()
但我真的想使用類似stat_summary(fun.data="mean_cl_boot")
的東西來顯示比例的可變性(即作用於原始數據框df
,並在行上進行引導)。我已經嘗試過創建自定義函數的一些嘗試,但這看起來並不重要,因爲首先需要將因素級別轉換爲引導程序。
僅供參考,這裏是全國的比重很短的版本:ggplot(DF,AES(X = RESP,顏色=人))+ geom_point(STAT = 「BIN」) – nassimhddd 2012-07-30 13:15:41
謝謝@ cafe876,但正如我在下面指出的那樣,這將返回行數而不是響應比例。由於我的數據實際上具有不同數量的人之間的行數,所以我希望比例而不是數量。這就要求將每個垃圾箱的每個垃圾箱的總數除以每個垃圾箱的總數......這就是爲什麼我最終編寫了上面的垃圾回收站(無法弄清楚如何使用plyr包)。 – tsawallis 2012-07-31 15:52:29