4

我有一个正确 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?

谢谢

4

2 回答 2

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<- 的解决方案也很好。设置 is.na 的一般逻辑没有多大意义 - 但只要确保事情不会变得太复杂,这没问题.)

ifelse做了一些隐式转换,所以我认为永远不可能使用ifelse.

于 2013-09-26T10:19:10.283 回答
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"
于 2013-09-26T05:15:56.663 回答