【发布时间】:2015-06-30 08:35:12
【问题描述】:
这很奇怪:R 的 ifelse() 似乎做了一些(不需要的)转换:
假设我有一个时间戳向量(可能是 NA),NA 值的处理方式应与现有日期不同,例如,只是忽略:
formatString = "%Y-%m-%d %H:%M:%OS"
timestamp = c(as.POSIXct(strptime("2000-01-01 12:00:00.000000", formatString)) + (1:3)*30, NA)
现在
timestamp
#[1] "2000-01-01 12:00:30 CET" "2000-01-01 12:01:00 CET" "2000-01-01 12:01:30 CET"
#[6] NA
根据需要,但翻译 30 秒会导致
ifelse(is.na(timestamp), NA, timestamp+30)
#[1] 946724460 946724490 946724520 NA
请注意,timestamp+30 仍按预期工作,但假设我想用固定日期替换 NA 日期并将所有其他日期翻译 30 秒:
fixedDate = as.POSIXct(strptime("2000-01-01 12:00:00.000000", formatString))
ifelse(is.na(timestamp), fixedDate, timestamp+30)
#[1] 946724460 946724490 946724520 946724400
问题:这个解决方案有什么问题,为什么不能按预期工作?
编辑:所需的输出是一个转换为 30 秒的时间戳(不是整数)向量,并且 NA 被替换为任何内容......
【问题讨论】:
-
什么不能按预期工作?我将
NA替换为fixedDate。或者我不明白这个问题。 -
我第二个@Pascal
as.numeric(fixedDate) == ifelse(is.na(timestamp), fixedDate, timestamp+30)[4]返回TRUE所以不确定真正的问题是什么 -
我怀疑要问的问题是:您的预期输出是什么?这可能有助于了解您卡在哪里
-
您应该研究
?ifelse的Value 和Warning 部分以及第三组示例(“ifelse()strips attributes”;“这在使用日期时很重要”)。 A relevant post(谷歌搜索“r ifelse as.POSIXct”时第一次点击)。 -
我编辑了标题以使问题比 “ifelse 坏了吗?” 更清楚。您需要说它正在剥离 POSIXct 属性。