2017-05-21 27 views
0

让我有这样一个数据帧(DF):日差与其他行不是NA

Date   x 
20.01.2016 34 
21.01.2016 28 
22.01.2016 NA 
23.01.2016 NA 
24.01.2016 56 
25.01.2016 NA 
26.01.2016 28 

我想这样的列(Z)添加到该数据帧

Date   x  z 
20.01.2016 34  - 
21.01.2016 28  1 
22.01.2016 NA  NA  
23.01.2016 NA  NA 
24.01.2016 56  3 
25.01.2016 NA  NA 
26.01.2016 28  2 

其中z表示相关行日期和最近的前一日期(其中x不是NA)之间的日差。

例如对于日期24.01.2016,最近的以前的日期是21.01.2016,其中x不是NA。所以这两个日期的日差是3.

如何使用R来做到这一点?

我会很乐意提供任何帮助。非常感谢。

+0

按日期排序的数据帧? –

+0

是@Bob Jansen – oercim

回答

2

Cinsidering您的日期变量是as.Date,(即。df$Date <- as.Date(df$Date, format = '%d.%m.%Y'))然后,

df$z[!is.na(df$x)] <- c(NA, diff.difftime(df$Date[!is.na(df$x)])) 

df 
#  Date x z 
#1 2016-01-20 34 NA 
#2 2016-01-21 28 1 
#3 2016-01-22 NA NA 
#4 2016-01-23 NA NA 
#5 2016-01-24 56 3 
#6 2016-01-25 NA NA 
#7 2016-01-26 28 2 
1

我们可以使用data.table

library(data.table) 
setDT(df)[, Date := as.IDate(Date, "%d.%m.%Y")][!is.na(x), z := Date - shift(Date)] 

df 
#   Date x z 
#1: 2016-01-20 34 NA 
#2: 2016-01-21 28 1 
#3: 2016-01-22 NA NA 
#4: 2016-01-23 NA NA 
#5: 2016-01-24 56 3 
#6: 2016-01-25 NA NA 
#7: 2016-01-26 28 2