与非NA

时间:2017-05-21 08:15:23

标签: r dataframe

让我有这样一个数据框(df):

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?

执行此操作

我会很高兴得到任何帮助。非常感谢。

2 个答案:

答案 0 :(得分:2)

请注意您的日期变量为 Scanner input = new SCanner(System.in); x = input.nextInt(); // y, z input string other = input.next() ,(即as.Date)然后,

df$Date <- as.Date(df$Date, format = '%d.%m.%Y')

答案 1 :(得分: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