2016-09-23 63 views
0

我試圖繪製的曲線圖,它示出了在特定類的數列的總的值,例如1,3,5等子設置數據R情節

這是我的〔實施例數據:

test <- data.frame("number"=sample(1:10),"class"=c(1,1,2,2,3,3,4,4,5,5)) 

我使用下面的代碼:

number <- test$number 
class <- test$class 
png("plot1_test.png", width=600, height=600) 
plot(class, number, type="h", xlab="Class", ylab="Sum of number") 
dev.off() 

結果出來它只能識別每個類的第一個值。如果我想要總數,我需要將每個類的子集合到總數中嗎?我如何創建一個只顯示一些班級並非全部的情節?

回答

1

嘗試使用aggregate。根據class中的值,它將把sum函數應用於test$number數據。

test.aggreg <- aggregate(test$number, by=list(test$class), sum) 
plot(test.aggreg, type="h", xlab="Class", ylab="Total for Class") 

它會看起來像this

+0

那好,我怎麼能只是想表明1級,3和5? – Alex

+0

切片'test.aggreg'數據幀。使用'test.aggreg [c(1,3,5),]'。實際上,任何訂單都可以。如:'test.aggreg [c(5,3,1),]' –

1

一個簡單的解決方案使用GGPLOT2:

library(ggplot2) 
ggplot(test, aes(class,number)) + geom_bar(stat="identity") 

另外,如果你不想使用GGPLOT2,骨料(使用dplyr):

library(dplyr) 
plotdb <- test %>% group_by(class) %>% 
    summarise(sum_number = sum(number)) 

然後,用你喜歡的繪圖功能與類和sum_number。

關於最後一個問題:爲了只選擇一些類,你可以一個dplyr ::過濾器添加到第一個選項:

library(ggplot2) 
library(dplyr) 
ggplot(filter(test,class %in% 1:3), aes(class,number)) + geom_bar(stat="identity")