【问题标题】:How to get the first rows in an R dataframe that meet a specific condition?如何获取满足特定条件的 R 数据框中的第一行?
【发布时间】:2016-09-01 23:00:57
【问题描述】:

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

每个患者可以有多个住院记录,但我只需要每个患者的第一次住院记录,例如根据入院日期记录每个患者 ID。我怎样才能在 R 中得到这个结果?

提前谢谢你。

【问题讨论】:

  • 您需要发布示例数据来制作您的示例reproducible。也许library(dplyr) ; df %>% group_by(patientID) %>% filter(admissionDate == min(admissionDate)
  • library(data.table); setDT(data); data[order(admission_date), .SD[1], by = patient_id]

标签: r dataframe filtering


【解决方案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, ]

让我知道这是怎么回事。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2021-12-21
    • 2022-06-22
    相关资源
    最近更新 更多