2017-05-19 7 views
-1

I Datenrahmen haben wie folgt aussehen:R- kombinieren Zeilen eines Datenrahmens von 3 Spalten eindeutig sein

> head(temp) 
     VisitIDCode start stop Value_EVS hr heart rate NU EE0A Value_EVS temp celsius CAL 113C Value_EVS current weight kg CAL 
23642 2008253059 695 696       <NA>       36.4       <NA> 
24339 2008253059 695 696        132       <NA>       <NA> 
72450 2008953178 527 528       <NA>       38.6       <NA> 
72957 2008953178 527 528        123       <NA>       <NA> 
73976 2008965669 527 528       <NA>       36.2       <NA> 
74504 2008965669 527 528        116       <NA>       <NA> 

erste und die zweite Reihe sind sowohl für den gleichen Patienten (gleiche VisitIDCode), in der ersten Zeile ich habe den Wert der Herzfrequenz und in den zweiten habe ich den Wert der Temperatur im Bereich von 2 bis 3. ich diese Zeilen kombinieren will, so dass das Ergebnis eine Zeile, die wie folgt aussieht:

 VisitIDCode start stop Value_EVS hr heart rate NU EE0A Value_EVS temp celsius CAL 113C Value_EVS current weight kg CAL 
23642 2008253059 695 696        132       36.4       <NA> 

in anderen Ich möchte, dass mein Datenrahmen durch die Kombination von VisitIDCode, start und stop eindeutig ist. Dies ist ein großer Datenrahmen mit mehr Spalten, die kombiniert werden müssen. Was ist der beste Weg dies zu tun und wenn möglich, for-Schleife zu vermeiden? Edit: Ich möchte die NAs nicht entfernen. Wenn es zwei Zeilen gibt, von denen jede einen Wert und zwei NAs hat, möchte ich sie zu einer Zeile kombinieren, so dass sie zwei Werte und eine NA hat. Wie im obigen Beispiel.

+1

Mögliche Duplikat [Zusammenführen von zwei Zeilen in einem Datenrahmen, wenn die Zeilen disjunkt sind und enthalten nulls] (http://stackoverflow.com/questions/14268814/merge-two -rows-in-einem-Datenrahmen-wh en-the-rows-sind-disjoint-and-contain-nulls) – Sotos

+0

Ich möchte nicht jedoch NAs entfernen. @Sotos – nasim

Antwort

0

Nachdem ich sicher, dass alle Spalten Klassen numerisch sind (nicht Faktoren) durch die Klassen der Spalten definieren, beim Lesen der Daten in dieser für mich gearbeitet:

CompleteCoxObs<-aggregate(x=CompleteCoxObs[c("stop","Value_EVS current weight kg CAL","Value_EVS hr heart rate NU EE0A","Value_EVS temp celsius CAL 113C")], by=list(VisitIDCode=CompleteCoxObs$VisitIDCode,start=CompleteCoxObs$start), max, na.rm = FALSE); 
1

nasim,

Es ist nützlich, um ein reproduzierbares Beispiel zu erstellen, wenn Fragen veröffentlichen. Es macht es viel einfacher zu sortieren, wie man hilft. Ich habe hier ein Spielzeugbeispiel erstellt. Wir hoffen, dass reproduziert das Problem:

> df <- data.frame(MRN = c(123,125,213,214), 
+     VID = c(2008,2008,2011,2011), 
+     start=c(695,695), 
+     heart.rate = c(NA,112,NA,96), 
+     temp = c(39.6,NA,37.4,NA)) 
> df 
    MRN VID start heart.rate temp 
1 123 2008 695   NA 39.6 
2 125 2008 695  112 NA 
3 213 2011 695   NA 37.4 
4 214 2011 695   96 NA 

Hier wird eine Lösung mit dplyr:

> library(dplyr) 
> df <- df %>% 
+ group_by(VID) %>% 
+ summarise(MRN = max(MRN,na.rm=T), 
+    start=max(start,na.rm=T), 
+    heart.rate=max(heart.rate,na.rm=T), 
+    temp = max(temp,na.rm=T)) 
> df 
# A tibble: 2 × 5 
    VID MRN start heart.rate temp 
    <dbl> <dbl> <dbl>  <dbl> <dbl> 
1 2008 125 695  112 39.6 
2 2011 214 695   96 37.4 
+0

BTW, dies wird NA erhalten, wenn es in allen Zeilen von einem bestimmten VID gruppiert ist – Eric

+0

Vielen Dank. Was ist mit den Spalten, die Werte haben, die keine Zahlen sind? Max() funktioniert nicht für diese. – nasim

+0

Ich sehe keinen nicht numerischen Wert im Datenrahmen, aber wenn ich den Code, den Sie vorgeschlagen haben, ausführen, erhalte ich diesen Fehler: Fehler in summarise_impl (.data, Punkte): 'max' nicht sinnvoll für Faktoren – nasim

Verwandte Themen