2017-04-20 1 views
0

zu starten, hier einige Beispieldaten genannt df1:Elegante Weise bestimmen letzte Beobachtung unter Zeitpunkten?

ID Time  Score1 Score2 SumScore 
1 Baseline 1  2  3 
1 Midpoint 2  2  4 
1 Final  3  2  5 
2 Baseline 2  2  4 
2 Midpoint 5  2  7 
2 Final  6  2  8 

Ich soll jetzt erwähnen, dass einige meiner ‚Final‘ Zeitpunkt Partituren in diesen Daten fehlen. Ich interessiere mich nur für diese Beobachtungen mit fehlenden Endzeitpunkten. Lassen Sie uns diese Beobachtungen wählen eine der neuen df df2 nennen: df2<-df1%>%filter(is.na(SumScore)==T,Time=="Final")

Von hier aus breitete ich die Daten tidyr::spread() mit einem neuen Datenrahmen (df3) zu erstellen, die wie folgt aussieht:

df3<-spread(df,ID,SumScore) 

ID Baseline Midpoint 
1 3  NA  
1 NA  4   
1 NA  NA  
2 4  NA  
2 NA  7   
2 NA  NA   

Was Ich mag würde Um dies zu erreichen, muss die letzte Beobachtung (unter den Basis- und Mittelpunkt-Zeitpunkten) bestimmt werden und diese Beobachtung dann für die Beobachtungen in df1 weitergeführt werden, denen der Endzeitpunkt-Punktestand fehlt. Es ist möglich, dass für einige Beobachtungen die Mittelpunkte ebenfalls fehlen. Ihre gewünschte Ausgabe für das Spielzeug Beispiel in Ihrer Frage

Dank

+0

Bitte nehmen. – lmo

+0

'do.call (rbind, lapply (geteilt (df1, df1 $ ID), Funktion (a) a [NROW (a),]))' –

+1

@ d.b Dies scheint wirklich gut zu funktionieren. Vielen Dank. – lecreprays

Antwort

0

Mit dplyr und tidyr, so etwas wie dies sein könnte, was Sie suchen ...

df4 <- df1 %>% select(-c(Score1,Score2)) %>% 
       spread(key=Time,value=SumScore) %>% 
       mutate(finalScore=coalesce(Final,Midpoint,Baseline)) 


df4 
    ID Baseline Final Midpoint finalScore 
1 1  3  5  4   5 
2 2  4  8  7   8 
Verwandte Themen