通过将变量分组以一次创建多个条形图来拆分数据集

时间:2013-05-03 03:24:17

标签: r list dataframe bar-chart split

我有一个大型数据集,如下所示:

  

时间,沉淀,grp

     

2005-09-30 11:45:00,1.1,1

     

2005-09-30 23:45:00,1.5,1

     

2005-10-01 23:45:00,0.2,2

     

2005-10-02 11:45:00,0.3,2

     

2005-10-02 23:45:00,1.7,2

     

2005-10-03 11:45:00,0.8,2

     

2005-10-04 23:45:00,1.4,4

我想为每个组创建单独的数据框(grp,我的完整数据集中总共有65个组)并为每个组生成一个条形图。

到目前为止,我已经列出了一个清单:

X <- split(df, df$grp)

str(X)

Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, 1:2]) 

lapply(seq_along(Y), function(x) {assign(grp[x], Y[[x]], envir=.GlobalEnv)})

产生这个:

>Y

>[[1]]

                 time precip

3 2005-10-01 11:45:00      0

8 2005-10-03 23:45:00      0

9 2005-10-04 11:45:00      0




[[2]]

               time   precip

1 2005-09-30 11:45:00 1.1

2 2005-09-30 23:45:00 1.5


...

现在有没有办法对每一个进行绘制,以便每个组都有不同的条形图,x轴上有时间,y轴上有沉淀?理想情况下,条形图将全部位于同一页面或同一输出的一部分上。

另外,有没有办法将每个导出为单独的数据框?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

lattice就是出于这种情况。

使用RoyalTS的数据df

library(lattice)
barchart(time~precip|grp, data=df)

enter image description here

答案 1 :(得分:0)

使用ggplot的facet函数可以更简单地做到这一点:

df_string <- 'time, precip, grp
2005-09-30 11:45:00,1.1,1
2005-09-30 23:45:00,1.5,1
2005-10-01 23:45:00,0.2,2
2005-10-02 11:45:00,0.3,2
2005-10-02 23:45:00,1.7,2
2005-10-03 11:45:00,0.8,2
2005-10-04 23:45:00,1.4,4'

con <- textConnection(df_string)
df <- read.csv(con)

# optional if the time isn't actually in a format R understands yet
library(lubridate)
df$time <- ymd_hms(df$time)

library(ggplot2)
p <- ggplot(df,(aes(time,precip)))
p <- p + geom_bar(stat = "identity")
p <- p + facet_wrap(~ grp)
p