How to extact all columns when using data.table in R? -
library(data.table) i trying this.
wd <- structure(list(year = c(2006l, 2006l, 2006l), day = c(361l, 361l, 360l), hour = c(14l, 8l, 8l), mint = c(30l, 0l, 30l), valu1 = c(0.5, 0.3, 0.4), date = structure(c(1167229800, 1167206400, 1167121800 ), class = c("posixct", "posixt"), tzone = "utc")), .names = c("year", "day", "hour", "mint", "valu1", "date"), row.names = c(na, -3l ), class = "data.frame") wg <- c("2006/12/27 14:23:59", "2006/12/27 16:47:59", "2006/12/27 19:12:00") w <- c("0.4", "0.2", "0.5") wf=data.frame(wg,w) wg <- as.posixct(wf$wg, format = "%y/%m/%d %t", tz = "utc") wg <- data.table(start = wg, end = wg) setkey(wg) ## same `wd` adding +/- 30 minutes setdt(wd)[, `:=`(start = date - 1800l, end = date + 1800l)] ## run foverlaps , extract match `valu1` column foverlaps(wd, wg, nomatch = 0l)[, .(wddate = date, valu1, wgdate = start)] wddate valu1 wgdate 1: 2006-12-27 14:30:00 0.5 2006-12-27 14:23:59 as can see in final results valu1 extracted wd extract corresponding values w in wf want this:
wddate valu1 wgdate w 1: 2006-12-27 14:30:00 0.5 2006-12-27 14:23:59 0.4 any idea welcome
real data:
head(wf) date1 date2 date3n wg w whyt 1 <na> 2003-01-01 <na> <na> na na 2 <na> 2003-01-02 <na> <na> na na 3 <na> 2003-01-03 <na> 2003/01/03 10:30:00 0.2137352 0.34 4 <na> 2003-01-04 <na> <na> na na facing problem here:
in previous answer i've created wg because provided wg single vector. if have data set called wf, whole proccess not needed. need adjust wf correctly , run foverlaps. in other words, forget wg , following
setdt(wf)[, wg := as.posixct(wg, format = "%y/%m/%d %t", tz = "utc")] wf[, `:=`(start = wg, end = wg)] setkey(wf, start, end) setdt(wd)[, `:=`(start = date - 1800l, end = date + 1800l)] foverlaps(wd, wf, nomatch = 0l)[, .(wddate = date, valu1, wgdate = start, w)] # wddate valu1 wgdate w # 1: 2006-12-27 14:30:00 0.5 2006-12-27 14:23:59 0.4
Comments
Post a Comment