我有一个大型数据集,如下所示:
时间,沉淀,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轴上有沉淀?理想情况下,条形图将全部位于同一页面或同一输出的一部分上。
另外,有没有办法将每个导出为单独的数据框?
提前谢谢!
答案 0 :(得分:1)
lattice
就是出于这种情况。
使用RoyalTS的数据df
:
library(lattice)
barchart(time~precip|grp, data=df)
答案 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