【问题标题】:r data.table minimum between dates excluding NAr data.table 日期之间的最小值,不包括 NA
【发布时间】:2021-06-09 07:04:40
【问题描述】:

我怎样才能以正确且更优雅的方式获得 FinalDate2?

date1 <- c("2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-01")
date2 <- c("2021-01-01","2019-01-01","2020-01-01",NA,NA)
Dates <- as.data.table(cbind(date1,date2))
Dates <- Dates[, date1 := as.Date(as.character(date1), format = "%Y-%m-%d")]
Dates <- Dates[, date2 := as.Date(as.character(date2), format = "%Y-%m-%d")]
Dates <- Dates[, FinalDate1 := ifelse(is.na(date2),date1,pmin(date1,date2))]
Dates <- Dates[, FinalDate2 := as.Date((ifelse(is.na(date2),date1,pmin(date1,date2))),format = "%Y-%m-%d")]

【问题讨论】:

    标签: r date data.table


    【解决方案1】:
    library( matrixStats )
    library( data.table )
    #set date1 and date2 to actual dates
    #  this replaces line 4 and 5 of your sample code
    Dates[, names(Dates) := lapply(.SD, function(x) as.numeric( as.Date(x))) ]
    #use matrixStats package for fast rowwise calculations
    Dates[, FinalDate2 := rowMins( as.matrix( .SD), na.rm = TRUE ) ][]
    #set all to dates again
    Dates[, names(Dates) := lapply(.SD, as.Date, origin = "1970-01-01" ) ]
    
            date1      date2 FinalDate2
    1: 2020-01-01 2021-01-01 2020-01-01
    2: 2020-01-01 2019-01-01 2019-01-01
    3: 2020-01-01 2020-01-01 2020-01-01
    4: 2020-01-01       <NA> 2020-01-01
    5: 2020-01-01       <NA> 2020-01-01
    

    【讨论】:

      【解决方案2】:

      好吧,您可以先删除所有那些 Dates &lt;- 。这就是 data.table 的全部意义所在,您可以通过引用来工作,就地修改它(从历史上看,这是一件非常非 R 的事情)

      但是对于答案,如果我理解正确的话,也许是一个简单的na.rm=TRUE

      library(lubridate)
      library(data.table)
      
      date1 <- ymd(c("2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-01"))
      date2 <- ymd(c("2021-01-01","2019-01-01","2020-01-01",NA,NA))
      Dates <- data.table( date1, date2 )
      Dates[, FinalDate := pmin(date1,date2,na.rm=T)]
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多