NanoTime: как бороться с NA в Tibble? - PullRequest
0 голосов
/ 06 марта 2020

Я использую превосходный пакет nanotime для хранения своих временных отметок, но я не могу заставить пакет работать, когда в моем tibble содержится пропущенное значение.

Учтите это:

library(nanotime)
library(tibble)
library(dplyr)

tibble(time = c('2020-01-01 10:10:10.123456',
                NA,
                '2020-01-01 10:10:10.123456')) %>% 
  mutate(enhance = nanotime(time, 
                            tz = 'GMT', 
                            format = '%Y-%m-%d %H:%M:%E9S'))
Error in RcppCCTZ::parseDouble(x, fmt = format, tz = tz) : 
  Parse error on NA

Что мне здесь не хватает? Использование na.rm = TRUE, к сожалению, не работает.

Спасибо!

1 Ответ

1 голос
/ 06 марта 2020

Проблема NA имеет логический тип, вам нужно, чтобы все значения в столбце были одинакового типа. Мы можем использовать as.integer64 для замены логических NA на integer64 NA.

library(nanotime)

tbl <- tibble::tibble(time = c('2020-01-01 10:10:10.123456',
            NA,
            '2020-01-01 10:10:10.123456'))
tbl$enhance <- as.integer64(NA)
tbl$enhance[!is.na(tbl$time)] <- nanotime(na.omit(tbl$time), tz = 'GMT',
                                 format = '%Y-%m-%d %H:%M:%E9S')
nanotime(tbl$enhance)
...