【问题标题】:R- date time variable loses format after ifelseR- 日期时间变量在 ifelse 之后丢失格式
【发布时间】:2013-09-26 05:06:43
【问题描述】:

我有一个正确的 POSIXct 格式的变量,用 ymd_hms(DateTime) {lubridate} 转换。 但是,在转换之后,变量会失去其 POSIXct 格式:

daily$DateTime<- ifelse(daily$ID %in% "r1_1"|daily$ID %in% "r1_2", 
                   NA,daily$DateTime)

我尝试使用 lubridate 再次将变量转换为 POSIXct,但它似乎不喜欢 NA,此外,现在变量 DateTime 具有 num 格式,lubridate 无法识别为日期和时间格式(例如 1377419400)。

当 ID== r1_1 和 r1_2 时,请帮助进行所需的转换以将 DateTime 转换为 NA??

谢谢

【问题讨论】:

标签: r na posixct lubridate


【解决方案1】:

以下应该有效:

daily <- data.frame(DateTime = seq(Sys.time(), length.out=10, by=1000), ID=rep(1:2,5))
daily$DateTime[daily$ID%in%2]<-NA

(虽然 is.na

ifelse 做了一些隐式转换,所以我认为不可能使用ifelse 保存日期类。

【讨论】:

    【解决方案2】:

    设置NA 值的惯用方法是使用is.na&lt;-,大多数类(包括日期)都会得到适当处理

     is.na(daily$DateTime) <- daily$ID %in% c('r1_1', 'r1_2')
    

    应该做的伎俩。

    使用 ?as.POSIXct 中的示例

      ## SPSS dates (R-help 2006-02-16)
    z <- c(10485849600, 10477641600, 10561104000, 10562745600)
    zz <- as.POSIXct(z, origin = "1582-10-14", tz = "GMT")
    
    is.na(zz) <- c(FALSE, TRUE, FALSE, FALSE)
    zz
    # [1] "1915-01-26 GMT" NA               "1917-06-15 GMT" "1917-07-04 GMT"
    

    【讨论】:

    • John Chambers 说,然而,用 is.na 设置 NA 的“惯用”方式是个坏主意。想想当你将向量中的一些 NA 元素设置为不是 NA 时会发生什么?结果很奇怪——你设置了 is.na(x)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2017-11-29
    • 2013-06-15
    • 1970-01-01
    • 2015-07-09
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多