我有一个包含以下内容的数据框
Date Comments failure #ofdays
2014-10-25 abc 0
2014-10-30 def 1
2014-11-10 ghi 0
2014-11-15 lmo 0
等......(它有更多行)。 我正在尝试编写R代码来实现填充#of days列,如下所示:
Date Comments failure #ofdays
2014-10-25 abc 0 0
2014-10-30 def 1 0
2014-11-10 ghi 0 10
2014-11-15 lmo 0 15
因此,基本上如果出现故障,#天数应重置为0.如果不是,则应保留自上次故障后的累计天数。 我试过了
no.of.days<-ifelse(failure==1,0, difftime((Date),lag(Date,1,default=0))+lag(no.of.days,1)
但我得到输出的垃圾值。它给了我30,000多天的输出。 但是,如果我为了测试目的而在两个值之间运行difftime,那么我正好得到#天。 你们其中一个人可以看看,让我知道我错过了什么吗? 提前谢谢!
答案 0 :(得分:2)
您可以尝试:
ave(as.numeric(df$Date),cumsum(df$failure!=0),FUN=function(x) x-x[1])
#[1] 0 0 11 16
请注意,在2014-10-30和2014-11-10之间有11天(而不是问题中指明的10天)。
数据强>
df<-structure(list(Date = structure(c(16368, 16373, 16384, 16389), class = "Date"),
Comments = c("abc", "def", "ghi", "lmo"), failure = c(0L,
1L, 0L, 0L)), .Names = c("Date", "Comments", "failure"), row.names = c(NA,
-4L), class = "data.frame")