r - Compare a Date in a data frame with two dates in other data frame -
i have been reading similar posts can't make of solutions work case (probably because new in r).
i have long dataset several parameters, 1 of date, , data frame date intervals correspond particular value. tried make reproducible example:
df = data.frame(date=c("2017/08/01 19:00:00","2017/08/01 19:10:00","2017/08/01 19:20:00","2017/08/01 19:30:00", "2017/08/01 19:40:00","2017/08/01 19:50:00","2017/08/01 20:00:00","2017/08/01 20:10:00"), factor1=c(10,15,11,13,14,12,16,15)) df2 = data.frame(start=c("2017/08/01 19:00:00","2017/08/01 19:40:00"), end=c("2017/08/01 19:15:00","2017/08/01 20:05:00"), factor2=c("a","b")) df$date <- as.posixct(df$date) df2$start <- as.posixct(df2$start) df2$end <- as.posixct(df2$end) and result want this:
result = data.frame(date=c("2017/08/01 19:00:00","2017/08/01 19:10:00","2017/08/01 19:20:00","2017/08/01 19:30:00", "2017/08/01 19:40:00","2017/08/01 19:50:00","2017/08/01 20:00:00","2017/08/01 20:10:00"), factor1=c(10,15,11,13,14,12,16,15),factor2=c("a","a","na","na","b","b","b","na")) i tried ifelse:
ifelse(df$date >= df2$start & df$date <= df2$end,df2$factor2,"na") but can't make work.
any advice?
this works on sample data:
result <- df result$factor2 <- na (i in seq_along(df$date)){ p <- ifelse(length(grep("true", (df$date[i] >= df2$start & df$date[i] <= df2$end)))!=0, grep("true", (df$date[i] >= df2$start & df$date[i] <= df2$end)), na) result$factor2[i] <- ifelse(!is.na(p), as.character(df2$factor2[p]), "na") } print(result) # date factor1 factor2 #1 2017-08-01 19:00:00 10 #2 2017-08-01 19:10:00 15 #3 2017-08-01 19:20:00 11 na #4 2017-08-01 19:30:00 13 na #5 2017-08-01 19:40:00 14 b #6 2017-08-01 19:50:00 12 b #7 2017-08-01 20:00:00 16 b #8 2017-08-01 20:10:00 15 na
Comments
Post a Comment