2017-11-14 4 views
1

Ich habe mehr Datetime-Spalten und ich brauche, wer von ihnen zu überprüfen, sind in der Zeitzone CESTMit grep auf posixct Vektoren

dat <- structure(c(1491199401.363, 1491201912.62, 1491205392.67, 1491205933.457, 1491206198.027, 1491206802.243), class = c("POSIXct", "POSIXt"), tzone = "") 
dat 
#[1] "2017-04-03 08:03:21 CEST" "2017-04-03 08:45:12 CEST" [3] 
#"2017-04-03 09:43:12 CEST" "2017-04-03 09:52:13 CEST" [5] "2017-04-03 
#09:56:38 CEST" "2017-04-03 10:06:42 CEST" 

any(grep("CEST", dat)) 
#[1] FALSE 
any(grep("CEST", "2017-04-03 08:03:21 CEST")) 
#[1] TRUE 

ich diese Methode bekommen zu arbeiten, wenn ich/kopieren und einfügen der Elemente in die grep Funktion, aber nicht, wenn ich es auf dem Vektor selbst ausführen. Die Verwendung von as.character(dat) funktioniert auch nicht. Wie mache ich das?

Antwort

0

Wir können die Zeitzone extrahieren mit format und verwenden %in% die

"CEST" %in% format(dat, format="%Z") 
#[1] TRUE 

zu bekommen oder eine andere Option ist zu unclass nach zu POSIXlt Umwandlung und extrahieren Sie die zone

"CEST" %in% unclass(as.POSIXlt(dat))$zone 
#[1] TRUE 

In das einzige Element, das das OP war grep Ping es ist ein character c Lass, während die datPOSIXct Klasse ist. So wird es in der Lage sein, den Teilstring mit grep zu finden. Auch wenn wandeln wir die ‚dat‘ zu character, wird es die Attribute heißt

as.character(dat) 
#[1] "2017-04-03 08:03:21" "2017-04-03 08:45:12" "2017-04-03 09:43:12" "2017-04-03 09:52:13" "2017-04-03 09:56:38" "2017-04-03 10:06:42" 

und daher grep nicht holen sie in der Lage zu verlieren

grepl("CEST", as.character(dat)) 
#[1] FALSE FALSE FALSE FALSE FALSE FALSE