2015-04-07 174 views
1

我有一个关于算法的问题,我不知道如何解决。如何计算R中两个事件之间的时间差?

我有一个数据集,看起来像这样:

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 
+2

您是否可以基于示例 – akrun

+0

更新预期的输出列,以便输入数据集?谢谢! –

+0

@akrun已完成! –

回答

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 
+0

嗨Dimitris。请问您的解决方案中符号%>%的含义是什么?谢谢。 –

+0

Hi @Xinting WANG,它被称为链接或管道,它是嵌套语法的一个简单替代方案。更多关于http://seananderson.ca/2014/09/13/dplyr-intro.html的结尾处有一个“一个很棒的例子”。请享用 –

相关问题