2014-11-10 5 views
0

나는 계절별로 일부 날짜의 하위 집합을 만들고 각 계절에 대해 '날짜 및 진폭'의 월별 플롯을 결합하려고합니다.데이터 프레임 목록에서 열을 플롯

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

여기 내 코드는 플롯 타이틀 계절과 월 (1 년 기준)을 만들 수있다 :

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() 패밀리를 사용하여 계절 목록을 순차적으로 나열하고 각 데이터 프레임의 날짜 및 진폭 열을 선택하고 'YearMonth'로 플로팅하십시오.

내가 가진 문제는 아마도 구문과 관련되어 있습니다. 나는 R과 프로그래밍에 익숙하지 않습니다. 그러나 나는 지난 며칠간 포럼을 수색하는데 보냈으며이 시점에서 어떤 방향으로 나아질 것입니다. 감사!

+0

문제는 'ggplot' 호출이 제대로 작동하지 않는다는 것입니다. – keegan

+0

ggplot 호출이 정상적으로 작동합니다. 수동으로 입력하지 않고 ggplot 호출에 각 시즌을 전달하면서 데이터 프레임 목록을 따라 시퀀스를 만들고 싶습니다. 즉 계절별로 나누기, $ YearMonth로 나누기, ggplot으로 전달. 모두 하나로 말이 돼? –

+0

어쩌면 각 계절에 해당하는 데이터 프레임 목록이 있습니까? 당신은 매 시즌 (각 패널은 YearMonth 임)의 플롯 그리드를 원하십니까, 아니면 매년 YearMonth에 대해 완전히 독립적 인 플롯을 원하십니까? – keegan

답변

1

는 여기에 내가 dataframes의리스트에 액세스 할 수 있습니다 원하는 출력

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 각 dataframe에 대한 플롯의 격자를 생성하는 데 사용됩니다.

+0

감사합니다. lapply()의 변수 'p'에 ggplot 함수를 할당 한 이유를 빨리 설명 할 수 있습니까? –

+0

'ggplot' 객체를 저장할 수 있으므로 나중에 인쇄하거나 레이어를 저장하거나 추가 할 수 있습니다. 우리는 이것을 할 필요가 없다. - 어느 쪽이든,'lapply()'의 결과는'myplots'라는 이름의'ggplot' 객체의리스트가 될 것이다. – keegan

+0

위대한, 도와 주셔서 대단히 감사합니다! –

관련 문제