如何获得满足特定条件的R数据帧中的第一行?

时间:2016-05-06 19:04:51

标签: r dataframe filtering

我有一个包含数千行的数据框。每一行都是住院记录;它包含患者的ID和许多健康信息(诊断,入院日期,解雇日期等)。

每位患者都可以拥有超过住院记录,但我只需要每位患者的第一次住院治疗,例如根据入院日期,每个患者ID的第一个记录。如何在R中获得此结果?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为我有一个解决方案,但可能有更顺畅的方法来做到这一点。

使用dplyr尝试此操作。请注意,我假设当你说'第一'记录时,你的意思是最老的记录。如果您想要最新记录,请改用max()

install.packages('dplyr')
library(dplyr)

your_data <- group_by(your_data, patientID)
## This gives you a data frame with all dates and IDs for first visits
first_records <- summarise(your_data, min(admit_date))

## Create ID to match 
first_records$matchID <- paste(first_records$patientID, first_records$admit_date)
your_data$matchID <- paste(your_data$patientID, your_data$admit_date)

## Get complete records
first_records <- your_data[your_data$matchID %in% first_records$matchID, ]

Lemme知道这是怎么回事。

编辑:看起来像@alistaire发布的更简单的解决方案:

your_data <- group_by(your_data, patientID)
first_records <- filter(your_data, adm_date == min(admission_date))