#make a horrible data frame:
ottawadates <- as.Date(c("2016-08-04", "2016-09-03", "2016-02-15", "2016-03-29, "2016-09-27"))
othervariable <- c(1, 2, 4, 5, 6)
df = data.frame(othervariable, ottawadates)
好的,所以我想做的就是创建一个名为'season'的新领域。我想使用日期范围来指示哪些日期属于相应的季节。为了清楚起见,我的实际数据集具有正确日期格式的日期,因此我猜测索引日期范围相当简单。
即。 12月21日 - 3月19日是冬天。 3月20日 - 6月20日是SPRING 6月21日 - 9月21日是夏天 9月23日 - 12月20日是FALL
我觉得这是一个for循环工作,但我太新手了解如何去做。
感谢。我很感激!
答案 0 :(得分:1)
您可以使用lubridate
和ifelse
根据日期范围查找季节。假设季节为Winter
和Other season
,则一种方法可以是:
#data
ottawadates <- as.Date(c("2016-08-04", "2016-09-03", "2016-02-15"))
othervariable <- c(1, 2, 4)
df = data.frame(othervariable, ottawadates)
library(lubridate)
df$ottawadates <- ymd(df$ottawadates)
#Evaluate season
df$season <- ifelse((month(df$ottawadates) %in% c(1, 2)) |
(month(df$ottawadates) == 12L & day(df$ottawadates) >= 21L) |
(month(df$ottawadates) == 3L & day(df$ottawadates) <= 19L),
"Winter",
ifelse( (month(df$ottawadates) %in% c(4, 5)) |
(month(df$ottawadates) == 3L & day(df$ottawadates) >= 20L) |
(month(df$ottawadates) == 6L & day(df$ottawadates) <= 20L),
"Spring",
ifelse( (month(df$ottawadates) %in% c(7, 8)) |
(month(df$ottawadates) == 6L & day(df$ottawadates) >= 21L) |
(month(df$ottawadates) == 9L & day(df$ottawadates) <= 21L),
"Summer", "Fall")))
df
# othervariable ottawadates season
#1 1 2016-08-04 Summer
#2 2 2016-09-03 Summer
#3 4 2016-02-15 Winter