2016-06-29 2 views
-1

약 2 분마다 데이터 포인트가있는 큰 데이터 프레임 (2007 ~ 2015 년)이 있습니다. 나는 매주 그래프를 2007 년부터 2015 년까지 계획하고 싶다. 매주 자동으로 내 컴퓨터 폴더에 PNG 파일로 내보내진다. 이전에는 매년, 매월 및 일일 플롯에 대한 작업 코드를 성공적으로 생성 할 수있었습니다. E.g.for 연간 데이터 :주간 데이터 플롯 R

for(j in 2007:2015){ 
mypath <- file.path("~", "Documents","Yearly", paste("WAO_AIR_Data_", j, ".png", sep = "")) 
png(filename = mypath, width = 963, height = 690) 
timePlot(selectByDate(new_subdata, year = j), 
     pollutant = c("CO2", "O2", "APO"), 
     date.pad = TRUE, 
     pch = c(19,19,19), 
     cex = 0.2, 
     xlab = paste("Month of year in", j), 
     ylab = "CO2, O2, and APO concentrations", 
     name.pol = c("CO2 (ppm)", "O2 (per meg)", "APO (per meg)"), 
) 
dev.off() 
} 

데이터 프레임이

tail(new_subdata) 
        date  CO2  O2  APO 
1052042 2015-12-31 23:48:45 409.636 -666.39 -353.27 
1052043 2015-12-31 23:50:46 409.652 -669.62 -356.41 
1052044 2015-12-31 23:52:44 409.679 -669.44 -356.09 
1052045 2015-12-31 23:54:46 409.703 -667.07 -353.59 
1052046 2015-12-31 23:56:44 409.719 -671.02 -357.46 
1052047 2015-12-31 23:58:46 409.734  NA  NA 

처럼 보인다하지만 매주 플로팅에 대한 코드를 생성하는 방법을 잘 모릅니다. 누구든지 제발 도와 주실 래요? 정말 고맙습니다! ?strptime 통해

+0

당신 날짜 변수가 있어야합니다. 'format (Sys.Date(), '% U % Y')'는 현재 주와 해를 서브 세트로 줄 것이다. – rawr

+0

내 데이터 프레임에 날짜 변수 열이 있습니다. 그리고 나는 현재 주를 얻고 싶지 않습니다. 저는 2007 년부터 2015까지 매주 음모를 꾸미고 싶습니다. 각 컴퓨터는 자동으로 내 컴퓨터 –

+0

@rawr로 내보내집니다. 제발 저에게 어떻게 말해 주실 수 있습니까? 감사합니다 –

답변

1

, 당신은 사소한 변경으로 예를 들어, 데이터를 사용하여 %U

%U Week of the year as decimal number (00–53) using Sunday as the first day 1 of the week (and typically with the first Sunday of the year as day 1 of week 1). The US convention.

x <- Sys.time() 
class(x); format(x, '%U') 
# [1] "POSIXct" "POSIXt" 
# [1] "26" 

x <- Sys.Date() 
class(x); format(x, '%U') 
# [1] "Date" 
# [1] "26" 

Date 또는 POSIXct에서 주를 얻을 수 있습니다 :

new_subdata <- read.table(header = TRUE, text = "date  CO2  O2  APO 
1052042 '2015-10-31 23:48:45' 409.636 -666.39 -353.27 
1052043 '2015-10-31 23:50:46' 409.652 -669.62 -356.41 
1052044 '2015-11-30 23:52:44' 409.679 -669.44 -356.09 
1052045 '2015-11-30 23:54:46' 409.703 -667.07 -353.59 
1052046 '2015-12-31 23:56:44' 409.719 -671.02 -357.46 
1052047 '2015-12-31 23:58:46' 409.734  NA  NA") 

## create a new grouping variable with year/week 
new_subdata <- within(new_subdata, { 
    yr_wk <- format(as.Date(date), '%Y %U') 
}) 

## iterate over the unique values 
jj <- unique(new_subdata$yr_wk) 
# [1] "2015 43" "2015 48" "2015 52" 

## do some plotting 
par(mfrow = n2mfrow(length(jj)), las = 1, mar = c(5,6,2,2), 
    tcl = .2, mgp = c(3,.25,0)) 
xr <- range(new_subdata$O2, na.rm = TRUE) 
yr <- range(new_subdata$CO2, na.rm = TRUE) 

for (j in jj) { 
    mypath <- file.path("~", "Documents","Yearly", sprintf("WAO_AIR_Data_%s.png", j)) 
    # png(filename = mypath, width = 963, height = 690) 
    plot(CO2 ~ O2, data = subset(new_subdata, yr_wk == j), xlim = xr, ylim = yr) 
    # dev.off() 
} 

myplot

+0

나는 정말로 당신이 만든 코드의 마지막 부분을 좋아합니다. 그것은 내 코드를 훨씬 더 짧게 만든다. 빠른 답변 주셔서 감사합니다 :) –

+0

openair 패키지에 timePlot 함수를 사용하여 시간별 데이터에 대한 코드를 재현하려고했습니다. 데이터 포인트가 1 시간 밖에되지 않는 경우 코드가 오류를 반환합니다. 제발 도와 주실 수 있나요? 감사합니다! –

+0

@TungLinh 위의 예는 하나의 데이터 포인트가있는 경우 오류없이 실행됩니다. 오류가 무엇입니까? – rawr