【问题标题】:How to calculate the time difference between two event in R?如何计算R中两个事件之间的时间差?
【发布时间】:2015-04-07 11:54:39
【问题描述】:

我有一个关于我不知道如何解决的算法的问题。

我有一个如下所示的数据集:

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

【问题讨论】:

  • 您能否根据显示的示例使用预期的输出列进行更新
  • 你能输入你的数据集吗?谢谢!
  • @akrun 已经完成了!
  • 不应该 Time Dose ID TPD 0.2 0 2 0.20.2 0 2 0 吗?您预期表中的第 9 行,即患者 id=2 在时间 0.2 尚未给药,因此时间仍然为零。
  • dat$TPD = with(dat, ave(Time , list(cumsum(Dose), ID) , FUN=function(x) c(0,cumsum(diff(x))))) 为您提供输出,但我不确定您所需的输出是否与您的文本匹配。 id2 的第二行的输出是否应该由0.0 而不是0.2 输出,因为它们尚未给药?

标签: r


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

【讨论】:

  • 嗨,迪米特里斯。请问您的解决方案中的符号 %>% 是什么意思?谢谢。
  • 嗨@Xinting WANG,它被称为链接或管道,它是嵌套语法的简单替代方案。更多关于 seananderson.ca/2014/09/13/dplyr-intro.html 的内容,在结尾处有一个“一个很棒的例子”。享受
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多