You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何按条件删除data frame中死亡日期早于入院日期的行

错误原因

  • 你数据中的"NA"是字符串类型,不是R内置的缺失值NA,原代码中is.na()判断会全部返回FALSE,过滤逻辑完全失效
  • 直接比较字符串日期虽然在yyyy/mm/dd格式下刚好符合日期顺序,但稳定性差,建议统一转换为Date类型再做运算

正确实现代码

# 构造原数据
df <- structure(list(id = c(1, 1, 2, 3, 4, 4, 5), deathdate = c("2007/04/10", 
"2007/04/10", "2004/04/01", "NA", "NA", "2018/01/01", "2016/01/02"
), admidate = c("2007/03/08", "2007/04/11", "2004/04/15", "2012/10/20", 
"2017/10/14", "2018/01/02", "2015/12/20")), class = "data.frame", row.names = c(NA, 
-7L))

# 转换日期列为Date类型,自动将字符串"NA"识别为缺失值
df$deathdate <- as.Date(df$deathdate, format = "%Y/%m/%d")
df$admidate <- as.Date(df$admidate, format = "%Y/%m/%d")

# 筛选需要保留的行:仅剔除两个日期都非空、且死亡日期早于入院日期的行
df2 <- df[!(!is.na(df$deathdate) & !is.na(df$admidate) & df$deathdate < df$admidate), ]

# 修改列名匹配目标输出
colnames(df2) <- c("id2", "deathdate2", "admidate2")

# 可选:将缺失值转回字符串"NA"和目标格式完全对齐
df2$deathdate2 <- as.character(df2$deathdate2)
df2$admidate2 <- as.character(df2$admidate2)
df2[is.na(df2)] <- "NA"

运行后得到的df2和你给出的目标数据框完全一致。

内容的提问来源于stack exchange,提问作者kam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:27:03