R — как применить as.POSIX для времени с большим количеством знаков после запятой

#r #lapply #posixct

#r #lapply #posixct

Вопрос:

У меня есть следующий формат даты и времени ( startime и stoptime ):

 objectid                     endtime                   starttime
1     310822 2020-09-07T00:00:00.0000000 2020-09-06T00:00:00.0000000
2     310821 2020-09-06T19:34:40.0000000 2020-09-06T19:33:21.0000000
3     310820 2020-09-06T19:32:09.0000000 2020-09-06T19:31:22.0000000
4     310819 2020-09-06T19:31:12.0000000 2020-09-06T19:30:31.0000000
5     310818 2020-09-06T19:29:16.0000000 2020-09-06T19:28:12.0000000
6     310817 2020-09-06T19:27:55.0000000 2020-09-06T19:27:09.0000000
7     310816 2020-09-06T19:25:03.0000000 2020-09-06T19:22:51.0000000
  

Через секунды проходит много знаков после запятой (это правильный термин), следовательно, время очень точное.

Я пытаюсь применить as.POSIX со следующим кодом:

 # grabs starttime and endtime
cols = grep( "time$", names(dataset), value = TRUE )

dataset[, (cols) := lapply( .SD, as.POSIXct, format = "%Y-%m-%dT%H:%M:%S"), .SDcols = cols ]
  

Однако я всегда получаю ошибку:

 Error in `[.data.frame`(dataset, , `:=`((cols), lapply(.SD, as.POSIXct,  : 
  unused argument (.SDcols = cols)
  

Я понял, что что-то не так с моим format : "%Y-%m-%dT%H:%M:%S" , как я должен правильно форматировать дату и время в приведенных выше данных?

Если нет лучшего способа, как я могу очистить данные, чтобы избавиться от знаков после запятой через несколько секунд?

Комментарии:

1. Вы уверены, что применяете тот же код, что и показано? Ваш код выглядит хорошо для меня. Можете ли вы предоставить свои данные с помощью dput(head(dataset)) ?

2. Возможно, у вас есть фрейм данных (из сообщения об ошибке), а не data.table, следовательно, синтаксис data.table не работает. Запустите setDT(dataset) и попробуйте свой код еще раз.