Я начинаю со следующего вопроса, чтобы искать свойства обобщения: , если утверждение с датами в R
df <- data.frame(date = as.Date(c("16.04.2015", "04.08.2014", "11.09.2013",
"20.11.2015", "04.04.2014"), '%d.%m.%Y'))
Я хочу идентифицировать все даты между 07-15 (% m-% d) и 12-31, например
> date value
> 16.04.2015 0
> 04.08.2014 1
> 11.09.2013 1
> 20.11.2015 1
> 04.04.2014 0
Мое решение основано на решении @rawr, опубликованном в приведенном выше вопросе:
Функция для интервала:
`%between%` <- function(x, interval) x >= interval[1] & x <= interval[2]
вектор со всем возможным началом:
begi <- as.Date(sprintf('%s-07-15',1993:2018))
# Vector with all the possible intervals
dates <- as.Date(c(sprintf('%s-07-15',1993:2018), sprintf('%s-12-31',1993:2018)))
Цикл с использованием функции
df$value <- NA
for (i in length(begi)) {
ind<-which(format(df$date,"%Y") == format(begi[i], "%Y"))
df$value[ind] <- 1*(df$date[ind] %between% as.Date(c(begi[i],
dates[i+length(begi)])))
}
Если я запускаю i
один за другим, я получаю желаемый результат.Однако, если я запустил цикл в последний i
, он перезаписывает весь столбец, а не использует только позицию, указанную ind
.Почему?