所以這裏是一個非優雅的方式來做到這一點。這個想法是隻檢查幾個月和幾天(並忽略輸入的年份)。如果有必要,在這些年中納入任何條件都會非常容易。因此,首先:
library(dplyr) # data manipulation
library(lubridate) # time and dates manipulation
df <- data.frame(DATE = c(19620101:19620106,19630101:19630106),
PRECIP = c(10.54, 6.39, 0.01, 0, 0.02, 20.94,10.54, 6.39, 0.01, 0, 0.02, 20.94),
OBS_Q = c(2.39, 2.38, 2.22, 2.24, 2.26, 5.13,2.39, 2.38, 2.22, 2.24, 2.26, 5.13))
# Here you actually specify what days to select. Only the "0106" part matters here
day_in_a_year <- paste0("1962", "0106")
days_shown <- 2 # how many days per year to show
# so, in this case, select 6th January and the day before
df %>% mutate(DATE = ymd(DATE)) %>%
arrange(DATE) %>%
filter(between(day(DATE), day(ymd(day_in_a_year) - days(days_shown - 1)), day(ymd(day_in_a_year))),
between(month(DATE), month(ymd(day_in_a_year) - days(days_shown - 1)), month(ymd(day_in_a_year))))
# DATE PRECIP OBS_Q
# 1 1962-01-05 0.02 2.26
# 2 1962-01-06 20.94 5.13
# 3 1963-01-05 0.02 2.26
# 4 1963-01-06 20.94 5.13
編輯:
既然你想(含)輸入日期的年份之前選擇裏,你可以使用這樣的事情:
df %>% mutate(DATE = ymd(DATE)) %>%
arrange(DATE) %>%
filter(between(day(DATE), day(ymd(day_in_a_year) - days(days_shown - 1)), day(ymd(day_in_a_year))),
between(month(DATE), month(ymd(day_in_a_year) - days(days_shown - 1)), month(ymd(day_in_a_year))),
year(DATE) <= year(ymd(day_in_a_year)))
在輸出你提到,你讀了n天的數據 - 每年 - 在這個特定的日期之後。所以你想要後或之前? – 2015-02-10 16:48:35
對不起,我想要所有。這是關鍵日期(0103),而不是一年。所以如果我提到19650103,我還需要3年。謝謝 – maximusdooku 2015-02-10 16:52:35
但是,如果有一個選項,我只能在特定年份之前使用這些數據,這將是一件好事。所以,如果我在1970年提到一個日期,我只用了它之前的幾年。但我猜想我可以在以後找到它。 – maximusdooku 2015-02-10 17:59:20