0

我有一个看起来像这样的大型数据集:

时间,沉淀,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 轴上是沉淀?理想情况下,条形图都将位于同一页面或同一输出的一部分上。

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

先感谢您!

4

2 回答 2

1

lattice是为这种事情而生的。

使用 RoyalTS 的数据df

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

在此处输入图像描述

于 2013-05-03T04:09:07.190 回答
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
于 2013-05-03T04:00:28.220 回答