2016-10-11 3 views
-1

reproduzierbares CodeMerge 2 Datum Datensätze

library("zoo") 
library("xts") 
x <- structure(c("2012-09-27 09:08:37", "2012-09-29 10:06:33", "2012-10-01 09:44:36","2012-10-04 14:37:05", "2012-10-15 13:18:21", "2012-10-17 17:33:46","2012-10-18 11:52:13", "2016-10-06 15:11:01", "2016-10-07 13:00:09","2016-10-07 12:20:57"), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", format = "%Y-%m-%d %H:%M:%S", index = structure(c(1348704000,1348876800, 1349049600, 1349308800, 1350259200, 1350432000, 1350518400,1475712000, 1475798400, 1475798400), tzone = "UTC", tclass = "Date"), .Dim = c(10L,1L)) 
y <- structure(c("1961-08-04 10:00:00", "1971-01-01 11:00:00", "1978-01-01 11:00:00","1979-01-01 11:00:00", "1983-01-01 11:00:00", "1984-01-01 11:00:00","1985-01-01 11:00:00", "2016-10-07 20:28:24", "2016-10-07 18:27:54","2016-10-08 00:38:40"), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", format = "%Y-%m-%d %H:%M:%S", index = structure(c(-265420800,31536000, 252460800, 283996800, 410227200, 441763200, 473385600,1475798400, 1475798400, 1475884800), tzone = "UTC", tclass = "Date"), .Dim = c(10L,1L)) 
x+y 
#expected result 
# get results 
#what happens 
#Error in `+.default`(x, y) : non-numeric argument to binary operator 

Grundsätzlich habe ich zwei Tage, die ich multiplizieren möchten, so dass ich nur die, die sehen, die sich schneid werden.

Sie können den Code in diesem Kern findenhttps://gist.github.com/baditaflorin/46b35b3044f69ed329e4c44067b7b246

Nun ist die TClass ist Datum hatte ich die Daten aus einer CSV-Datei importiert mit

x <- xts(csv_file, format = "%Y-%m-%d %H:%M:%S",order.by=as.Date(csv_file)) 

Ich versuchte auch, die zu konvertieren Daten aber Fehler

x2 <- as.Date.POSIXlt(x , format = "%Y-%m-%d %H:%M:%S" , tz = "GMT") 

Error in as.POSIXlt.default(x, tz, ...) : 
    do not know how to convert 'x' to class “POSIXlt” 

Das sind meine se ssion Informationen:

R version 3.3.1 (2016-06-21) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Ubuntu 16.04.1 LTS 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8   LC_MONETARY=en_US.UTF-8 
[6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8   LC_NAME=C     LC_ADDRESS=C      LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] devtools_1.12.0 xts_0.9-7  zoo_1.7-13  

loaded via a namespace (and not attached): 
[1] httr_1.2.1  R6_2.2.0  tools_3.3.1  withr_1.0.2  curl_2.1  memoise_1.0.0 grid_3.3.1  digest_0.6.10 
[9] lattice_0.20-34 
+0

Was ist Ihre eigentliche Frage? Können Sie ein [reproduzierbares Beispiel] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) zur Verfügung stellen (in Ihrer Frage bitte, nicht in einem Kern)? Außerdem hat der Code in Ihrem Kern einen Syntaxfehler (die 'b <- Struktur ... 'Zeile ist nicht vollständig). Der Fehler, den Sie in Ihrem Fragentitel angegeben haben, stimmt mit nichts in Ihrer Frage überein. Was bedeutet es, ein Datum hinzuzufügen? –

+0

Verwenden Sie 'dput()' auf einer Teilmenge von 'x', um uns zu zeigen, was gerade passiert. Ohne einige Informationen zu 'x' können wir nur raten. – Jason

+0

Ich habe den Kern so modifiziert, dass er den richtigen Code für b enthält. @ mathematic.coffee ich versuche das zu emulieren [https://campus.datacamp.com/courses/manipulating-time-series-data-in-r-with-xts-zoo/first-order-of-business-basic -Manipulationen? ex = 12], aber mit meinem Dataset, nicht dem Xample-Dataset –

Antwort

2

Von Ihre Kommentare möchten Sie entweder eine Kreuzung oder eine innere Verknüpfung auf den Indexspalten der beiden XTS-Objekte.

> intersect(index(x), index(y)) 
[1] 17081 
> as.Date(intersect(index(x), index(y))) 
[1] "2016-10-07" 

Der Merge in xts standardmäßig auf "äußere", die im Gegensatz zu den Merge-Funktionen Basis R ist, so das Hinzufügen einer "Join" Spezifikation ist erforderlich:

> merge(x,y, join="inner") 
      x      y      
2016-10-07 "2016-10-07 13:00:09" "2016-10-07 20:28:24" 
2016-10-07 "2016-10-07 12:20:57" "2016-10-07 18:27:54" 
+0

Danke, es funktionierte das erste Mal, jetzt funktioniert nicht mehr, ich versuchte das letzte, mit Merge und ich bekomme diesen Fehler 4996 2013-10-24 11:05:04 2016-10-07 20:28:24 4997 2013-10-23 18:11:03 2016-10-07 20:28:24 4998 2013-10-23 09:16:10 2016-10-07 20:28:24 4999 2013-10- 16 12:47:09 2016-10-07 20:28:24 5000 2013-10-16 11:55:17 2016-10-07 20:28:24 [erreichte getOption ("max.print") - - 4608424 Zeilen weggelassen] Von was ich sehe es macht alles mit allem –

+0

Nach dem Löschen aller Objekte aus dem Arbeitsbereich. Ich werde aufhören zu versuchen und noch ein paar Tutorials machen, vielleicht gibt es einen besseren Weg –