2017-04-10 4 views
0

Würde mich nicht kümmern, um andere Lösungen zu sehen, aber ich verstehe auch nicht, warum ich unvollständige und falsche Antwort bekomme. (schmieren :: Intervall wird falsch)Joining Daten wo Timepoint ist innerhalb eines Intervalls

Zum Beispiel ist del_time [1,] nicht im Intervall der Zeiten [3,]. Ziel ist es, "status" mit del_time zu verbinden, wobei der Zeitpunkt ein Intervall ist.

Beispieldaten:

library(lubridate) 
library(dplyr) 

ti <- now() 

times <- tibble(time1 = c(ti + 3600, ti + 7200, ti + 10800, ti + 14000), 
        time2 = time1 + 3599, status = c("One", "Two", "Three", "Four")) 

del_time <- tibble(time = times$time1 + 1750) 

Code:

FUN1 <- function(x,y){ 

    x <- ymd_hms(x) 
    which_int <- x %within% interval(start = y[[1]], end = y[[2]]) 
    out <- as.character(y[which_int, 3]) 
    return(out) 
} 


del_time$status <- apply(del_time[, 1], 1, FUN1, y = times) 
del_time 
+0

Sie könnten auch einen Blick auf [beetenwen] (https://www.rdocumentation.org/packages/dplyr/versions/0.5.0/topics/between) von 'dplyr' – count

+0

Regular Benutzer von% zwischen% von data.table, wusste nicht dplyr hatte seine Version, danke. – MLEN

Antwort

0

Die Lösung lautet:

which_int <- x %within% interval(start = ymd_hms(y[[1]]), end = ymd_hms(y[[2]])) 

Allerdings würde ich nicht alternative Lösungen kümmern.

Verwandte Themen