У меня есть два фрейма данных, DFA с датами и id и другие DFB с id и два столбца дат date0, date1. Мне нужна функция для поиска дат в DFA в DFB и создания списка с 1, если дата находится в диапазоне и 0, если нет. После severals испытаний, у меня есть эта функция:r lapply по переменной id
completa_roles <- function(x, y, z) {
for(i in 1: length(y)){
if ((x >= y[i] & x <= z[i])==TRUE) {
m[i] <- 1
} else {
m[i] <- 0
}
}
return(m)
}
lapply(x, FUN=completa_roles, y=DFB$date0, z=DFB$date1)
Эта работа хорошо для одного идентификатора, но я не могу разделить функции по переменной ид, я судил, tapply и dlply. Помощь будет оценена. Пример:
DFA <- data.frame(id= c(3,3,3,3,3,3,5,5,5), x=c("2007-07-01", "2007-08-01", "2007-09-01",
"2007-10-01", "2007-11-01", "2007-12-01",
"2010-06-01", "2009-06-01", "2008-06-01"),
stringsAsFactors = FALSE)
DFB <- data.frame(id=c(3,3,3,3,5,5), date0=c("2010-01-01", "2008-02-20", "2007-04-02",
"2012-09-01", "2000-06-01", "2004-06-01"), date1=c("2015-06-30", "2009-12-31", "2012-08-31",
"2015-06-30", "2002-06-01", "2008-06-01"),
stringsAsFactors = FALSE)
DFA$x <- as.Date(DFA$x, origin = "1970-01-01")
DFB$date0 <- as.Date(DFB$date0, origin = "1970-01-01")
DFB$date1 <- as.Date(DFB$date1, origin = "1970-01-01")
m <- list()
completa_roles <- function(x, y, z) {
for(i in 1: length(y)){
if ((x >= y[i] & x <= z[i])==TRUE) {
m[i] <- 1
} else {
m[i] <- 0
}
}
return(m)
}
x <- DFA$x
res <- lapply(x, FUN=completa_roles, y= DFB$date0, z= DFB$date1)
Просьба рассмотреть возможность воспроизведения воспроизводимого примера. – akrun
Спасибо, я добавляю пример. – AngeG