2017-02-23 4 views
0

Ich fusioniere zwei Datensätze RH.data und CC (siehe unten).Dateien mit verschiedenen Spalten, Reihen und Datumsreihenfolge zusammenführen

>head(RH.data) 
    date  RH 
1 2005-05-01 71.1 
2 2005-05-02 47.0 
3 2005-05-03 58.6 
4 2005-05-04 44.2 
5 2005-05-05 41.8 
6 2005-05-06 61.3 

> head(cc) 
X id  date case year month temp 
1 1 2005-05-01 1 2005  5  98    
2 1 2005-05-02 0 2005  5  62    
3 1 2005-05-05 0 2005  5  78       
4 2 2005-05-01 1 2005  5  64 
5 2 2005-05-06 0 2005  5  75    
6 2 2005-05-04 0 2005  5  98 
7 2 2005-05-02 0 2005  5  62 
8 3 2005-05-03 1 2005  5  88  

Ich versuche, sie nach Datum zu fusionieren mit dem Code

merge(CC, RH.data, by="date", all=T) 

Jedoch, wenn ich diesen Code ausführen, wird das Datum ändert und meine Daten ersetzt mit NA

date X id case year month temp  RH 
1 12904 NA NA NA NA NA  NA  71.1 
2 12905 NA NA NA NA NA  NA  47.0 
3 12906 NA NA NA NA NA  NA  58.6 
4 12907 NA NA NA NA NA  NA  44.2 

I muss die Reihenfolge von CC gleich bleiben und einfach für die Werte von RH eingeben, wo das Datum gleich ist. Welcher Code würde mir erlauben, das zu tun?

+0

Willkommen bei StackOverflow. Bitte werfen Sie einen Blick auf diesen Beitrag in [Erstellen Sie ein großartiges Beispiel in R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Es wäre hilfreich, wenn Sie 'dput' verwenden, um Beispiele zu geben. Kopieren der Ergebnisse von 'dput (head (RH))' und 'dput (head (cc))'. Beachten Sie auch, dass es einen Tippfehler in Ihrer "merge" -Funktion gibt. Sie wollen 'merge (cc, RH, von =" date ", all = T)' nach Ihrem vorherigen Code. – lmo

Antwort

0

Angenommen, Sie möchten Ihrem cc data.frame entsprechende RH-Werte hinzufügen, sollten Sie Folgendes tun.

cc$RH <- NA 
for(i in 1:nrow(RH.data)) cc$RH[cc$date==RH.data$date[i]] <- RH.data$RH[i] 
0

diese Lösung Versuchen Sie, die tidyverse Pakete mit:

library(tidyverse) 

date = c("2005-05-01", "2005-05-02", "2005-05-03", "2005-05-04", "2005-05-05", "2005-05-06") 
RH = c(71.1, 47.0, 58.6, 44.2, 41.8, 61.3) 

RH <- data_frame(date, RH) 

X <- 1:8 
id <- c(1, 1, 1, 2, 2, 2, 2, 3) 
date <- c("2005-05-01", "2005-05-02", "2005-05-05", "2005-05-01", "2005-05-06", "2005-05-04", "2005-05-02", "2005-05-03") 
case <- c(1, 0, 0, 1, 0, 0, 0, 1) 
year <- 2005 
month <- 5 
temp <- c(98, 62, 78, 64, 75, 98, 62, 88) 

cc <- data_frame(X, id, date, case, year, month, temp) 

joined <- right_join(RH, cc, by = "date") 

Sie sollten auch prüfen, "aufzuräumen" Dataset finden http://tidyr.tidyverse.org.

Verwandte Themen