我对一个我不知道如何解决的算法有疑问。
我有一个如下所示的数据集:
Time Dose ID
0 0 1
0.1 1 1
0.2 0 1
0.3 0 1
0.4 1 1
0.5 0 1
0.7 0 1
0 0 2
0.2 0 2
0.3 1 2
0.4 0 2
0.6 0 2
0.8 1 2
0.9 0 2
1.0 1 2
1.5 0 2
数据集中有许多科目,每个科目在不同时间给药。我想要计算的是计算一列数据,即每个受试者最后一次给药后的时间。由于每个受试者多次给药,如何更新从R程序中减去的时间?谢谢!
预期的外观将是:
Time Dose ID TPD
0 0 1 0
0.1 1 1 0
0.2 0 1 0.1
0.3 0 1 0.2
0.4 1 1 0
0.5 0 1 0.1
0.7 0 1 0.3
0 0 2 0
0.2 0 2 0.2
0.3 1 2 0
0.4 0 2 0.1
0.6 0 2 0.3
0.8 1 2 0
0.9 0 2 0.1
1.0 1 2 0
1.5 0 2 0.5
答案 0 :(得分:1)
也许这就是你要找的东西
library(dplyr)
df %>% arrange(ID, Time) %>% group_by(ID) %>%
mutate(TPD=(Time-cummax(Time*Dose))*cummax(Dose)) %>% ungroup
<强> 数据 强>
df <- data.frame(Time=c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0, 0.2, 0.3, 0.4, 0.6, 0.8, 0.9, 1.0, 1.5),
Dose=c(0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0),
ID=c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2))
如果您的数据未排序,则:
library(dplyr)
df %>% arrange(ID, Time) %>% group_by(ID) %>%
mutate(TPD=(Time-cummax(Time*Dose))*cummax(Dose)) %>% ungroup