我是R和本网站的新手。我试图在这个网站上搜索找到我的问题的解决方案,但我找不到它。我的问题如下:
如何计算出“' 1”的日期之间的差异? ID和上一个日期有' 0' ID。那么有一个' 2' ID和上一个日期有ID' 0'等等?我想将这种差异添加为一个新专栏'差异'到我的数据表。
此外,我想要一个名为' Performed_Date'当在' 1'之间计算差异时,显示与ID(1,2等等)相对应的日期。或者' 2' ID和' 0' ID。
此外,当没有' 0' ID之间的ID(ID' 2'以及ID' 3'例如)它应该计算最高ID之间的差异(' 3'在此例子)和上一个日期的' 0' ID。
我的数据表如下:
Registration Date ID CBI TBI
A118 7-3-2017 0 NA NA
A118 8-3-2017 0 NA NA
A118 9-3-2017 1 5 10
A118 10-3-2017 0 NA NA
A118 11-3-2017 2 8 16
A118 12-3-2017 3 9 18
A118 13-3-2017 0 NA NA
A118 14-3-2017 4 5 10
我的预期输出如下:
Registration Date ID CBI TBI Difference Performed_Date
A118 7-3-2017 0 NA NA 1 9-3-2017
A118 8-3-2017 0 NA NA 1 11-3-2017
A118 9-3-2017 1 5 10 2 12-3-2017
A118 10-3-2017 0 NA NA 1 14-3-2017
A118 11-3-2017 2 8 16
A118 12-3-2017 3 9 18
A118 13-3-2017 0 NA NA
A118 14-3-2017 4 5 10
我认为它应该是ave函数的for循环,但我想不出可以计算它的东西。有人可以告诉我如何计算这个吗?
答案 0 :(得分:1)
你去,
数据:
df<-
data.table::fread("
Registration Date ID CBI TBI
A118 7-3-2017 0 NA NA
A118 8-3-2017 0 NA NA
A118 9-3-2017 1 5 10
A118 10-3-2017 0 NA NA
A118 11-3-2017 2 8 16
A118 12-3-2017 3 9 18
A118 13-3-2017 0 NA NA
A118 14-3-2017 4 5 10")
代码:
df$Date <- as.Date(df$Date,format="%d-%m-%Y")
nonZeroIDs <- which(df$ID != 0)
relatedIDs <- sapply(nonZeroIDs,function(x){
for(i in x:1) if(df$ID[i] == 0) return(i)
})
diffs <- df$Date[nonZeroIDs] - df$Date[relatedIDs]
result<- data.frame(Difference=diffs,Performed_Date=df$Date[nonZeroIDs])
结果:
Difference Performed_Date
1 1 days 2017-03-09
2 1 days 2017-03-11
3 2 days 2017-03-12
4 1 days 2017-03-14