从数据框列表中绘制列

时间:2014-11-10 15:43:51

标签: r lapply

我试图将某些日期分为季节,然后结合每月的日期和幅度'每个季节。

head(dat)
    Date  Amplitude
1 2009-09-13 -2.6966667
2 2009-09-14 -0.7264583
3 2009-09-15 -2.1823333

这是我为剧情标题创建季​​节和YearMonth的代码:

x <- as.Date(dat$Date, format="%Y/%m/%d")
x <- as.Date(x, origin="2009-09-13")
x <- cut(x, breaks="quarter")
labs <- paste(substr(levels(x),1,4),"/",1:4, sep="")
dat$DateQ <- factor(x, labels=labs)
dat$YearMonth <- format(dat$Date, "%Y/%m")
head(dat)
Date  Amplitude  DateQ YearMonth
1 2009-09-13 -2.6966667 2009/1   2009/09
2 2009-09-14 -0.7264583 2009/1   2009/09

我使用拆分为每个季节创建数据框,然后使用for循环命名数据框

dat_split_season <- split(dat, dat$DateQ)
new_names <- c("Summer_2009", "Fall_2009", "Winter_2010", "Spring_2010", 
          "Summer_2010", "Fall_2010", "Winter_2011",
          "Spring_2011", "Summer_2011", "Fall_2011",
          "Winter_2012", "Spring_2012", "Summer_2012")
for (i in 1:length(dat_split_season)) {
assign(new_names[i], dat_split_season[[i]])
}

我可以通过改变df

手动创建所需的月度图
df <- Winter_2012
graphs <- lapply(split(df,df$YearMonth),
   function(gg) ggplot(gg, aes(x=Date, y=Amplitude)) +
     geom_point() + geom_line() + ylim(-10, 10) +
     ggtitle(paste(gg$YearMonth)) + theme_bw())
do.call("grid.arrange", graphs)

我想使用for循环或apply()系列来对季节列表进行排序,为每个数据框选择Date和Amplitude列,并按照'YearMonth&#39;来绘制。

我遇到的问题可能与语法有关;我是R的新手和一般的编程。但是我花了最近几天搜索论坛,我希望在这一点上有一些方向。谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个我认为可以重新创建所需输出的最小例子

df1<-data.frame(YearMonth=c(rep('Aug_2012',10),rep('Sep_2012',10),rep('Oct_2012',10)), value=rnorm(30),t=rep(1:10,3) )
df2<-data.frame(YearMonth=c(rep('Aug_2012',10),rep('Sep_2012',10),rep('Oct_2012',10)), value=rnorm(30),t=rep(1:10,3) )
df_list<-list(df1,df2)

myplots<-lapply(df_list,function(x)
p<-ggplot(x,aes(x=t,y=value,group=factor(YearMonth),color=factor(YearMonth))) + geom_line() + facet_wrap(~YearMonth)
)

lapply用于访问数据框列表,然后facet_wrap用于为每个数据框创建图表网格。