2017-04-20 49 views
0

開始,這裏的一些示例數據稱爲DF1:優雅的方式確定時間點之間的最後一次觀察?

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 

我現在應該是一些在這些數據中我的「最後」的時間點得分的缺失不在話下。我只對那些缺少最終時間點的觀察感興趣。我們選擇這些意見的調用新的DF DF2:df2<-df1%>%filter(is.na(SumScore)==T,Time=="Final")

從這裏,我用tidyr::spread()創建一個新的數據幀(DF3)傳播的數據,看起來像這樣:

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   

我想要完成的是確定最後一次觀察(在基線和中點時間點之間),然後對df1中缺少最終時間點得分的觀測進行觀測。對於一些觀察來說,也可能缺少中點分數。

感謝

+0

請附上您的問題玩具比如你所需的輸出。 – lmo

+0

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

+1

@ d.b這看起來確實很好。謝謝。 – lecreprays

回答

0

使用dplyrtidyr,這樣的事情可能是你在找什麼...

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 
相關問題