2015-05-11 2 views
2
library(data.table) 

Я пытаюсь это сделать.Как вывести все столбцы при использовании data.table в R?

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) 
## Do the same for `wd` adding +/- 30 minutes 
setDT(wd)[, `:=`(start = Date - 1800L, end = Date + 1800L)] 
## Run foverlaps and extract the 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 

Как вы можете видеть в конечных результатах была извлечена из wd только valu1, но я хотел бы также, чтобы извлечь соответствующие значения из w в wf , так что я хочу что-то вроде этого:

     wdDate valu1    WGDate  w 
    1: 2006-12-27 14:30:00 0.5 2006-12-27 14:23:59  0.4  

Любые идеи приветствуются

настоящие данные:

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 

Столкнувшись с проблемой здесь:

ответ

4

In my previous answer я создал WG, потому что вы предоставили wg как единый вектор. Если у вас уже есть набор данных, называемый wf, весь этот процесс не нужен. Вам просто нужно правильно настроить wf, а затем запустить foverlaps. Другими словами, забудьте о WG и сделайте следующее

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 
+0

Я добавил '' '' setDT (WD) [ ': =' (начало = Дата - 1800L, конец = Дата + 1800L)] ' '' 'назад, я думал, вы уже сделали эту линию. Все до (включая) 'wf = data.frame (wg, w)' такое же, как и в вашем сообщении, поэтому я больше не повторил его. –

+0

В какой колонке есть НС? 'Wg'? –

+1

'w' не имеет значения, потому что он не соединяется. Попробуйте удалить 'NA' из 'wf', используя' wf <- na.omit (wf, by = "wg") ', а затем запустите' foverlaps' –

Смежные вопросы