2014-02-27 19 views
0

我有一個數據框的列表,我想爲他們每個做一個barplot。詳細sum是酒吧的高度,而users是每個酒吧的標籤。如何爲數據框列表製作條形圖?

result12

[[1]] 
     users sum 
1 00250902DC7D 34 
2 00250902FA92 34 
3 00250902FB05 34 
4 002509030C41 34 
5 002509030E53 34 

[[2]] 
     users sum 
1 00250902DC7D 24 
2 00250902FA92 24 
3 00250902FB05 24 
4 002509030C41 24 
5 002509030E53 24 

[[3]] 
[1] times users signal mode diff 
<0 rows> (or 0-length row.names) 

[[4]] 
     users sum 
1 00250902DC7D 1 
2 00250902FA92 1 
3 00250902FB05 1 
4 002509030C41 1 
5 002509030E53 71 

dput(result12)
list(structure(list(users = structure(c(1L, 3L, 4L, 10L, 13L), .Label = c("00250902DC7D", "00250902FA91", "00250902FA92", "00250902FB05", "00250902FB2E", "00250902FE0A", "00250902FE63", "002509030AD2", "002509030B9D", "002509030C41", "002509030C8D", "002509030CE4", "002509030E53", "002509030E63"), class = "factor"), sum = c(34, 34, 34, 34, 34 )), .Names = c("users", "sum"), row.names = c(NA, -5L), class = "data.frame"), structure(list(users = structure(c(1L, 3L, 4L, 10L, 13L), .Label = c("00250902DC7D", "00250902FA91", "00250902FA92", "00250902FB05", "00250902FB2E", "00250902FE0A", "00250902FE63", "002509030AD2", "002509030B9D", "002509030C41", "002509030C8D", "002509030CE4", "002509030E53", "002509030E63"), class = "factor"), sum = c(24, 24, 24, 24, 24)), .Names = c("users", "sum"), row.names = c(NA, -5L), class = "data.frame"), structure(list(times = structure(numeric(0), class = c("POSIXct", "POSIXt"), tzone = ""), users = structure(integer(0), .Label = c("00250902DC7D", "00250902FA91", "00250902FA92", "00250902FB05", "00250902FB2E", "00250902FE0A", "00250902FE63", "002509030AD2", "002509030B9D", "002509030C41", "002509030C8D", "002509030CE4", "002509030E53", "002509030E63"), class = "factor"), signal = structure(integer(0), .Label = c("false", "true"), class = "factor"), mode = structure(integer(0), .Label = c("OFF", "ON"), class = "factor"), diff = numeric(0)), .Names = c("times", "users", "signal", "mode", "diff"), row.names = integer(0), class = "data.frame"), structure(list(users = structure(c(1L, 3L, 4L, 10L, 13L), .Label = c("00250902DC7D", "00250902FA91", "00250902FA92", "00250902FB05", "00250902FB2E", "00250902FE0A", "00250902FE63", "002509030AD2", "002509030B9D", "002509030C41", "002509030C8D", "002509030CE4", "002509030E53", "002509030E63"), class = "factor"), sum = c(1, 1, 1, 1, 71 )), .Names = c("users", "sum"), row.names = c(NA, -5L), class = "data.frame"))

我怎樣才能自動生成我barplots?

+0

是的,它不起作用。可能我寫錯了代碼 – antonio

+0

我的錯。請看我的答案。 –

回答

1

您需要先從列表中刪除空的數據框。

> res <- result12[sapply(result12, dim)[1,] != 0] 
> res 
[[1]] 
     users sum 
1 00250902DC7D 34 
2 00250902FA92 34 
3 00250902FB05 34 
4 002509030C41 34 
5 002509030E53 34 

[[2]] 
     users sum 
1 00250902DC7D 24 
2 00250902FA92 24 
3 00250902FB05 24 
4 002509030C41 24 
5 002509030E53 24 

[[3]] 
     users sum 
1 00250902DC7D 1 
2 00250902FA92 1 
3 00250902FB05 1 
4 002509030C41 1 
5 002509030E53 71 

然後進行觀看所有(在PDF文件)通過使用

> pdf("result12.pdf") 
> lapply(1:length(res), function(i){ 
    barplot(res[[i]]$sum, names.arg = res[[i]]$users) 
    }) 
> dev.off() 
+0

我已經嘗試過,但它不工作...:'> lapply(1:length(result12),function(i){barplot(result12 [[i]] $ sum,names.arg = result12 [[i]] $用戶)})result12 [[i]]中的錯誤$ sum:$運算符對原子向量無效' – antonio

+0

'Result12'是'Pino'的較短版本。我修改了我的初始問題以使它更方便 – antonio

+0

我修改了它。您需要先從列表中刪除空的數據框。 –

1

您可以使用melt()reshape2包重塑數據這一點。然後你可以使用ggplot2來製作幽靈。

require(reshape2) 
require(ggplot2) 
pino2=melt(pino,id.vars=c('users','sum')) 

ggplot(pino2,aes(x=factor(users),y=sum))+geom_bar(stat='identity')+ 
facet_grid('L1~.') 

L1是進入該列表的數量,所以這是什麼正在按分組(如果我理解正確的話)。如果您不想這樣做,請不要在ggplot行的末尾插入+ facet_grid('L1~.')

+0

我試圖'mel',但我失敗了,錯誤:'錯誤:id變量沒有在數據中找到:sum' – antonio

+0

第七個元素有可能造成麻煩,因爲它沒有尺寸。嘗試設置'pino [[7]] = NULL' –

+0

仍然是相同的錯誤 – antonio

相關問題