我在R中有一个数据框,看起来像这样

PatientID Date Dose Creatinine
101 02.08.23 NA 65
101 03.08.23 1000 NA
101 04.08.23 1000 NA
101 04.08.23 NA 68
102 10.09.23 NA 89
102 10.09.23 1000 NA

每个患者有多行,每行只记录一种变量.

对于每个患者ID,我想删除在第一次服药前记录的肌酸值.因此,对于患者101,我想go 掉第一个肌酸值,对于患者102,我想保留第一个肌酸值.

我知道在第一次注射之前最多记录一个肌酸值,所以我只需要判断每个患者的第一次肌酸值,如果它是在第一次注射之前记录的.我就是不明白该怎么做!

我需要这样做的原因是计算每个患者的肌酸值的平均值,不包括我上面解释的值.

推荐答案

一旦您的Date变量是Date对象,只需使用filter即可完成此操作:

library(dplyr)

df |> 
  mutate(Date = as.Date(Date, "%m.%d.%y")) |>
  filter(Date >= Date[which(!is.na(Dose))[1]], .by = PatientID)

Date[which(!is.na(Dose))[1]]查找第一次非NA剂量的索引,然后使用该索引查找相应的日期.注意:这假设您的数据是按升序预先排序的(在您的示例中就是这样).

Output

  PatientID       Date Dose Creatinine
1       101 2023-03-08 1000         NA
2       101 2023-04-08 1000         NA
3       101 2023-04-08   NA         68
4       102 2023-10-09   NA         89
5       102 2023-10-09 1000         NA

Data

structure(list(PatientID = c(101L, 101L, 101L, 101L, 102L, 102L
), Date = c("02.08.23", "03.08.23", "04.08.23", "04.08.23", "10.09.23", 
"10.09.23"), Dose = c(NA, 1000L, 1000L, NA, NA, 1000L), Creatinine = c(65L, 
NA, NA, 68L, 89L, NA)), class = "data.frame", row.names = c(NA, 
-6L))

R相关问答推荐

更改网格的crs以匹配简单要素点对象的crs

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

如何根据包含相同值的某些列获取总额

在特定列上滞后n行,同时扩展框架的长度

根据收件箱中的特定值提取列名

用derrr在R中查找组间的重复项

ggplot2中的X轴显示数值,单位为百,而不是十

如何在modelsummary中重命名统计数据?

计算满足R中条件的连续列

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

计算直线上点到参考点的总距离

如何将一些单元格的内容随机 Select 到一个数据框中?

为什么不能使用lApply在包装函数中调用子集

将CSV转换为R中的自定义JSON格式

把代码写成dplyr中的group_by/摘要更简洁吗?

如何将两个用不同的运算符替换*的矩阵相乘

真实世界坐标的逆st_变换

GgHighlight找不到它创建的列:`Highlight..1`->;`Highlight.....`

如何修改Rust中的R字符串并将其赋给新的R变量,并使用extendr保留原始R字符串

如何从矩阵绘制环弦图