Я пытаюсь решить проблему с lapply.Будучи SAS-программистом, этот способ мышления является для меня совершенно новым.
library(data.table)
library(lubridate)
У меня есть таблица данных, похожая на эту
DT <- data.table(idnum= c(1001,1001,1001,1002,1002,1003,1003,1003,1003),
a_beg= c(16079, 16700, 17000, 16074, 17000, 16074, 17000, 18081, 19000),
a_end= c(16500, 16850, 22000, 16900, 22000, 16950, 18000, 18950, 21000))
a_beg и a_end, содержащие номер sas-date (дней с 1960-01-01)
Это моя функция лет.Я хочу применить свою функцию к объекту data.table, сохраняя только строки, интервалы которых перекрывают учебный год
years <- function(DT, year) {
DT <- DT[lubridate::date('1960-01-01')+a_beg <= lubridate::ymd(paste(year, 1, 1, sep = "-"))
& lubridate::date('1960-01-01')+a_end >= lubridate::ymd(paste(year, 12, 31, sep = "-")), ]
DT
}
Выполнение без применения прекрасно работает ...
year2005 <- years(DT, 2005)
Я хочучтобы сделать что-то вроде этого ... переходя через годы обучения, используя bind_rows и pipe в data.table
DT <- bind_rows(lapply(DT, 2004:2015, years())) %>% data.table()
Я хочу использовать итератор в качестве параметра для функции, я не знаю, как.