Импортированный файл CSV создает NA после такой же обработки с созданным кадром данных - PullRequest
0 голосов
/ 17 марта 2020

Моя цель - извлечь время из столбца datetime и отобразить его внутри DT :: datatable (). Пример ниже работает нормально:

require(lubridate)
require(dplyr)

df = data.frame(timestring = c("2015-12-12 13:34:56", "2015-12-14 16:23:32"),
                localzone = c("America/Los_Angeles", "America/New_York"), stringsAsFactors = F)

df$moment = as.POSIXct(df$timestring, format="%Y-%m-%d %H:%M:%S", tz="UTC")
df = df %>% rowwise() %>% mutate(localtime = force_tz(moment, localzone))
df$t <- strftime(df$moment, format="%H:%M:%S")
df$t2 <- strftime(df$localtime, format="%H:%M:%S")
DT::datatable(df)

Но когда я пытаюсь сделать то же самое с файлом CSV, который импортирует с:

    df2<-data.frame(read.csv("C:/Users/User/Documents/spotlight/Spotlight-SampleData/device1-report1583417393205.csv", header = TRUE))


ID EventType         EventDate EventValue EventValueExt1 EventValueExt2 EventValueExt3 EventValueExt4
1 12340     steps 2019-11-26T21:18Z       3017             NA             NA             NA             NA
2 12339     steps 2019-11-25T14:23Z       3016             NA             NA             NA             NA

, а затем обработает его:

df2$EventDate<-as.character(df2$EventDate)
df2$moment = as.POSIXct(df2$EventDate, format="%Y-%m-%d %H:%M:%S", tz="UTC")

Я получаю АН в df2$moment

ID EventType         EventDate EventValue EventValueExt1 EventValueExt2 EventValueExt3 EventValueExt4 moment
1 12340     steps 2019-11-26T21:18Z       3017             NA             NA             NA             NA   <NA>
2 12339     steps 2019-11-25T14:23Z       3016             NA             NA             NA             NA   <NA>

Почему это происходит? Я даже пытался преобразовать df2$EventDate в символ, но он не работает

1 Ответ

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

Формат у вас в CSV отличается от того, что у вас в примере. Попробуйте использовать:

df2$moment = as.POSIXct(df2$EventDate, format="%Y-%m-%dT%H:%M", tz="UTC")

Или используйте lubridate s ymd_hm, если вам не нужно беспокоиться о формате.

df2$moment <- lubridate::ymd_hm(df2$EventDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...