【发布时间】:2021-02-02 12:59:04
【问题描述】:
我正在使用如下所示的数据框(让我们调用 MyData)。我想做的是按 PatientKey 分组并创建一个名为 NewID 的新 ID。每次对于 TimeBetweenTests > 14 的同一个 PatientKey,新的 Id 应该增加 1,并保持在该特定的新值上,直到出现新的 PatientKey 或对于相同的 PatientKey,出现新的 TimeBetweenTests > 14。
PatientKey TimeBetweenTests NewId
1 0 NewId should be 1 (first patient)
1 0 NewId should be 1
1 1 NewId should be 1
1 2 NewId should be 1
2 3 NewId should be 2 (new patient)
3 4 NewId should be 3 (new patient)
3 16 NewId should be 4 (same patient but TimeBetweenTests > 14)
3 80 NewId should be 5 (same patient but TimeBetweenTests > 14)
4 3 NewId should be 6 (new patient)
4 0 NewId should be 6 (new patient)
4 90 NewId should be 7 (same patient but TimeBetweenTests > 14)
4 110 NewId should be 8 (same patient but TimeBetweenTests > 14)
5 3 NewId should be 9 (new patient)
5 3 NewId should be 9
5 3 NewId should be 9
etc
我已尝试为此使用 dplyr,但问题是当我尝试类似以下代码时后续值不会改变:
MyData % group_by(PatientKey) %>% mutate(NewId = ifelse(TimeBetweenTests > 14, lag(NewId), NewId))
任何人都有一个方便的 dplyr 或 data.table 解决方案,或者 for 循环方法。
【问题讨论】:
标签: r dplyr data.table