根据日期标准将某些值设置为数据框

时间:2017-02-23 16:46:48

标签: r dataframe criteria

我想将值NA设置为在特定日期之前发生的数据帧中的某些行/列。但每列都有不同的日期/标准。那么这将如何运作?

示例数据帧:

dates <- c("01/01/2015", "06/15/2015", "11/30/2015")
a <- c(1, 2, 3)
b <- c(2, 4, 6)
c <- c(3, 5, 9)
df <- data.frame(Date = dates, A = a, B = b, C = c)

startDate <- c("02/20/2015", "07/28/2015", "12/01/2015")

所以我的data.frame看起来像这样:

    Date        A      B     C
    01/01/2015  1      2     3
    06/15/2015  2      4     5
    11/30/2015  3      6     9

使用startDate作为我的条件,我想在NA的相对列中设置该日期之前的任何值,以便我的最终结果如下所示:

    Date        A      B     C
    01/01/2015  NA     NA    NA
    06/15/2015  2      NA    NA
    11/30/2015  3      6     NA

有人可以帮帮我吗? 顺便说一句,我真正的data.frame有大约20多列。以上只是我实际问题的一个较小的例子。

提前致谢!

1 个答案:

答案 0 :(得分:0)

测试一下:

#Do a pairwise comparison of dates using outer
m = matrix(
    as.numeric(
        outer(as.Date(as.character(df[,1]), format = "%m/%d/%Y"),
              as.Date(as.character(startDate), format = "%m/%d/%Y"), ">" )
    ),
    nrow = nrow(df))

m[m == 0] = NA #Set zeroes in m to NA
df[,2:ncol(df)] = df[,2:ncol(df)] * m #Multiply the columns of df (except 1st) with m
df
#        Date  A  B  C
#1 01/01/2015 NA NA NA
#2 06/15/2015  2 NA NA
#3 11/30/2015  3  6 NA