2015-05-08 7 views
1

Я пытаюсь учитывать бесконечные даты в PostgreSQL таким образом, который соответствует бесконечным значениям даты, описанным в this question. Однако я не могу заставить код работать правильно.R бесконечности даты, смешанные с текстом

df <- data.frame(dates = c("2012-08-06", "2014-05-05", 'infinity', '-infinity',as.character(Sys.Date()))) 

convertime <- function(x){ 
    time <- ifelse(
      x == 'infinity', 
       as.POSIXct(Inf, origin="1970-01-01"), 
      ifelse(
      x == '-infinity', 
       as.POSIXct(-Inf, origin="1970-01-01"), 
       as.POSIXct(x) 
      ) 
     ) 
    return(time) 
} 
df$time <- convertime(df$dates) 

Это дает следующее сообщение об ошибке:

Error in as.POSIXlt.character(as.character(x), ...) : 
character string is not in a standard unambiguous format 

Любые идеи?

ответ

1

ifelse создает каждое из возможных значений, и оно вылетает на as.POSIXct("infinity").

Вместо этого попробуйте

converttime <- function(x,o="1970-01-01",posinf="infinity",neginf="-infinity"){ 
    xc <- x 
    xc[x%in%c(posinf,neginf)] <- NA 

    d   <- as.POSIXct(xc, origin=o) 
    d[x==posinf] <- as.POSIXct(Inf, origin=o) 
    d[x==neginf] <- as.POSIXct(-Inf, origin=o) 

    d 
} 

d <- converttime(df$dates) 
d[3] > d[4] # TRUE 

 Смежные вопросы

  • Нет связанных вопросов^_^