优雅的方式确定时间点之间的最后一次观察?
问题描述:
开始,这里的一些示例数据称为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中缺少最终时间点得分的观测进行观测。对于一些观察来说,也可能缺少中点分数。
感谢
答
使用dplyr
和tidyr
,这样的事情可能是你在找什么...
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
请附上您的问题玩具比如你所需的输出。 – lmo
'do.call(rbind,lapply(split(df1,df1 $ ID),function(a)a [NROW(a),]))' –
@ d.b这看起来确实很好。谢谢。 – lecreprays