2016-04-22 14 views
0

Ich habe einen Datenrahmen, df:R - Wie wird ein Datenrahmen basierend auf der Beziehung zwischen zwei Spalten umgestaltet?

ICD MRN  Adm   
X  24  1/01/2015  
Y  21  1/22/2015  
A  10  2/09/2015  
B  10  2/09/2015  
C  10  2/09/2015  
F  97  4/10/2015  
X  97  4/10/2015  
Z  33  5/17/2015  

Was würde ich tun möchte, ist für jede MRN ICD Werte gehen in ihre eigene Spalte haben. Es ist in Ordnung, wenn eine MRN nur einen ICD zugeordnet hat, aber wenn mehrere Werte vorhanden sind, sollten sie in eine eigene Spalte gehen.

Etwas wie folgt aus:

MRN  ICD.1  ICD.2 ICD.3  Adm  
24   X   NA  NA  1/01/2015 
21   Y   NA  NA  1/22/2015 
10   A   B  C  2/09/2015 
97   F   X  NA  4/10/2015 
33   Z   NA  NA  5/17/2015 

ich nicht herausfinden kann, wie dies zu tun! Es ist schwer für mich, die Frage überhaupt zu stellen! Ich vermute, es erfordert die Verwendung von reshape2, aber ich bin in diesem Bereich schwach und würde etwas Hilfe von der Gemeinschaft lieben.

+1

Yup, das wäre die 'dcast' Funktion von' reshape2' – CephBirk

+0

Wenn es möglich ist, wären Sie bereit, mir zu zeigen, wie das funktioniert? –

Antwort

2

Hier ist eine Art und Weise - irgendwo duplizieren ...

library(tidyr) 
library(dplyr) 

df %>% 
    group_by(MRN) %>% 
    mutate(ICD_lbl = paste0("ICD.", data.table::rleid(ICD))) %>% 
    spread(ICD_lbl, ICD) 
+0

Das funktioniert, aber ich würde gerne ein Beispiel mit 'dcast' und' reshape2' sehen. Wenn niemand schreibt, werde ich dies als die richtige Antwort markieren. Vielen Dank für Ihre Hilfe! –

+1

Ich denke nicht, dass Sie hier rleid müssen. Wie auch immer, das Data.table-Analog ist "dcast (setDT (DF), MRN + Adm ~ rowid (MRN), value.var =" ICD ")". Fühlen Sie sich frei, es hinzuzufügen. – Frank

+0

Danke @Frank !! –

Verwandte Themen