R-date时间变量在ifelse之后丢失格式

时间:2013-09-26 05:06:44

标签: r na posixct lubridate

我有一个适当的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时将所需的转换转换为NA DateTime的任何帮助

由于

2 个答案:

答案 0 :(得分:2)

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

 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"

答案 1 :(得分:2)

以下内容应该有效:

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&lt; - 的解决方案也很好。只有设置is.na的一般逻辑没有多大意义 - 但只要你确定事情没有,那就没问题了太复杂了。)

ifelse进行了一些隐式转换,所以我认为永远不可能使用ifelse保留日期类。