#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)
и попробуйте свой код еще раз.