2010-06-21 32 views
0

如果我們有這樣的問題,我必須做一個調查報告(所有答案都是複選框)。Barplot可視化複選框

What is you favorite cake(s) (please choose more than one): 
[] Tiramisù 
[] Carrot Cake 
[] Cupcake 

然後調查軟件出口到CSV這樣的:

"username","likes_tiramisu","likes_carrotcake","likes_cupcake" 
"test01",1,1,1 
"test02",0,1,1 
"test03",0,1,0 
"test04",0,0,1 

我想作一個barplot,每一個直方圖代表每個蛋糕的頻率。 我如何可以結合一個表是這樣的:

"likes_tiramisu" "likes_carrotcake" "likes_cupcake" 
       1     3    3 

難道我只是在每列中的所有元素的和解決的呢? 它在概念上有效嗎?

+2

'我想製作一個barplot,每個histogr我代表了每一個蛋糕的頻率。「也許你的意思是...... ......每個* bin *代表頻率......」 – aL3xa 2010-06-21 17:44:07

+0

是的,對不起......我的意思是每個垃圾箱。 – 2010-06-22 05:38:12

回答

3

假設你的數據在文件中:survey.csv

然後創建一個barplot使用以下命令:

#Read in the data 
d = read.table("survey.csv", sep=",", header=TRUE) 

#Need to skip the username column, so d[,2:4] 
#Use apply to calculate the totals in your table 
barplot(apply(d[,2:4], 2, sum)) 

HTH

+0

科林,謝謝你的提示! 我有一個小問題,因爲在列中我也有NA。是否有命令將NA作爲0處理? – 2010-06-22 09:06:54

+0

好的,我發現它:barplot(apply(d [,2:4],2,sum,na.rm = TRUE))我愛R越來越多 – 2010-06-22 09:08:36

+0

有一個專用函數來求和列 - colSums。你可以使用'colSums(d [,2:4])'或'colSums(d [2:4])'和'NA'去除colSums(d [,2:4],na.rm = TRUE) '或'colSums(d [2:4],na.rm = TRUE)'。 – Marek 2010-06-23 12:58:51

2

一個ggplot2的方法是這樣的:

library(ggplot2) 

data.melt <- melt(data, id = "username") 
qplot(variable, value, data = data.melt, geom = "bar", stat = "identity") 
+0

我不知道ggplot2中的熔化命令。看起來相當強大!此示例非常感謝 – 2010-06-22 05:44:47

+0

melt()實際上來自ggplot2加載的重塑包。 – JoFrhwld 2010-06-22 17:13:16

+0

對於更新版本的'ggplot2',您必須明確加載'reshape'或'reshape2',而不是依靠'ggplot2'來自動執行。 – 2012-09-26 18:48:07