2011-11-18 45 views
2

我的數據集如下:http://dl.dropbox.com/u/822467/Data.csvDataframe中的總結因素

我的情況是這樣的。我有一系列的問題(總共27個),其中響應是二元的。 0 =否,1 =是,999 =缺失。

我的第一個問題是如何將所有列轉換爲因子。我可以使用as.factors一個接一個地完成它,但它需要永久。

我的第二個問題是,我需要一個問題作爲標題的摘要和是和否作爲第一列,並且單元格填充了每個問題的是和否的頻率。

我還需要另一個數據框與%。非常感謝我的幫助。我已經看過Hmisc的軟件包總結和總結,所以無濟於事。

+2

如果你展示你已經做了什麼,我會更傾向於提供幫助。否則,感覺有點像你在尋求免費的技術支持。 – Andrie

+0

您的Dropbox鏈接已死亡。請粘貼一些實際的樣本CVS文件行。否則,答案只對你有意義,而不是我們其他人。 – smci

回答

3

四行代碼...

dat <- read.csv("http://dl.dropbox.com/u/822467/Data.csv") 
dat[, -1] <- lapply(dat[, -1], factor, levels=c(0, 1, 999), 
    labels=c("No", "Yes", NA)) 
xx <- do.call(rbind, lapply(dat[, -1], table, useNA="always")) 
cbind(xx, sum=rowSums(xx), prop.table(xx, margin=1)) 

...產生這樣的結果:

No Yes <NA> sum  No  Yes  <NA> 
Q1 7 57 0 64 0.109375 0.890625 0.000000 
Q2 40 22 2 64 0.625000 0.343750 0.031250 
Q3 28 36 0 64 0.437500 0.562500 0.000000 
Q4 43 18 3 64 0.671875 0.281250 0.046875 
Q5 24 39 1 64 0.375000 0.609375 0.015625 
Q6 21 42 1 64 0.328125 0.656250 0.015625 
Q7 15 49 0 64 0.234375 0.765625 0.000000 
Q8 4 60 0 64 0.062500 0.937500 0.000000 
Q9 60 4 0 64 0.937500 0.062500 0.000000 
Q10 39 25 0 64 0.609375 0.390625 0.000000 
Q11 55 8 1 64 0.859375 0.125000 0.015625 
Q12 20 44 0 64 0.312500 0.687500 0.000000 
Q13 49 15 0 64 0.765625 0.234375 0.000000 
Q14 49 15 0 64 0.765625 0.234375 0.000000 
Q15 51 13 0 64 0.796875 0.203125 0.000000 
Q16 61 3 0 64 0.953125 0.046875 0.000000 
Q17 41 23 0 64 0.640625 0.359375 0.000000 
Q18 60 4 0 64 0.937500 0.062500 0.000000 
Q19 64 0 0 64 1.000000 0.000000 0.000000 
Q20 60 4 0 64 0.937500 0.062500 0.000000 
Q21 60 4 0 64 0.937500 0.062500 0.000000 
Q22 43 21 0 64 0.671875 0.328125 0.000000 
Q23 59 4 1 64 0.921875 0.062500 0.015625 
Q24 10 54 0 64 0.156250 0.843750 0.000000 
Q25 54 9 1 64 0.843750 0.140625 0.015625 
Q26 24 39 1 64 0.375000 0.609375 0.015625 
Q27 0 0 64 64 0.000000 0.000000 1.000000 
+0

我注意到問題19顯示了64和yes和no。解決它,它歸結爲應用(dat [,-1],2,表),它產生64爲否,沒有是的。任何想法如何得到「適用」產生0是的? – JackeJR

+0

@ RJ-回答編輯使用'lapply'而不是'apply' - 修復了Q19 – Andrie

1

要打開所有列因素,你可以使用lapply和轉換回data.frame,因爲data.frames是非常相似的名單:

tab <- read.csv("Data.csv") 
tab <- as.data.frame(lapply(tab, as.factor)) 

對於剩下的我Andrie的評論表示贊同。 ..你有沒有試過table功能?它可能會讓你感興趣。

+0

感謝@Andrie。注意你的評論關於放下我試過的東西。下次發帖時會記住這一點。 – JackeJR

0

下面是一個使用reshape2另一種解決方案。

dat <- read.csv("http://dl.dropbox.com/u/822467/Data.csv") 
dat2 <- setNames(dcast(melt(dat, 1), variable ~ value), c('Q', 'No', 'Yes', NA)) 
dat2[,-1] = dat2[,-1]/rowSums(dat2[,-1])