我试图将某些日期分为季节,然后结合每月的日期和幅度'每个季节。
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的新手和一般的编程。但是我花了最近几天搜索论坛,我希望在这一点上有一些方向。谢谢!
答案 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
用于为每个数据框创建图表网格。