Почему, когда я запускаю `head (df $ date_time_hour)` я не получаю правильный формат, который я знаю, что переменная имеет (`% Y-% m-% d% H`) - PullRequest
1 голос
/ 15 мая 2019

У меня есть фрейм данных df со столбцом под названием datetime, который суммирует дату и время. Этот столбец имеет формат POSIXct ("% Y:% m:% d% H:% M:% S). Я создал новую переменную с именем Date_time_hour, в которой я хочу только часовое время (формат"% Y "). :% m:% d% H "). Я сомневаюсь, что когда я запускаю head(df$date_time_hour), я получаю дату, но не время в консоли. Почему это так? Я делаю что-то не так?

Любопытно, что в приведенном ниже примере я не получаю закомментированную проблему.

Пример:

df1<-data.frame(DateTime=c("2016-08-01 12:04:07","2016-08-01 12:06:07","2016-08-01 13:12:12","2016-08-01 14:04:07","2016-08-01 15:01:45","2016-08-01 15:34:07","2016-08-01 16:25:16","2016-08-01 16:29:16","2016-08-01 16:33:16","2016-08-01 16:54:16","2016-08-01 16:58:16","2016-08-01 17:13:16","2016-08-01 17:21:16","2016-08-01 17:23:42","2016-08-01 17:27:16","2016-08-01 17:28:16","2016-08-01 17:29:28","2016-08-01 17:42:08"),Var1=c( "V6", "V7", "V6", "V6", "V7", "V7", "V6", "V6", "V6", "V7", "V7", "V7", "V6", "V6", "V6", "V9", "V7", "V4" ),Var3=c(16 , 17, 19, 16, 17, 16, 17, 16, 16, 19, 17, 16, 16, 17, 17, 19, 16, 17))
df1$DateTime<- as.POSIXct(df1$DateTime, format= "%Y-%m-%d %H:%M:%S", tz= "UTC")
df1$Date_time_hour<- strptime(df1$DateTime, "%Y-%m-%d %H",tz= "UTC")
df1$Date_time_hour<- as.POSIXct(df1$Date_time_hour, format="%Y-%m-%d %H:%M:%S", tz="UTC")

df1
              DateTime Var1 Var3      Date_time_hour
1  2016-08-01 12:04:07   V6   16 2016-08-01 12:00:00
2  2016-08-01 12:06:07   V7   17 2016-08-01 12:00:00
3  2016-08-01 13:12:12   V6   19 2016-08-01 13:00:00
4  2016-08-01 14:04:07   V6   16 2016-08-01 14:00:00
5  2016-08-01 15:01:45   V7   17 2016-08-01 15:00:00
6  2016-08-01 15:34:07   V7   16 2016-08-01 15:00:00
7  2016-08-01 16:25:16   V6   17 2016-08-01 16:00:00
8  2016-08-01 16:29:16   V6   16 2016-08-01 16:00:00
9  2016-08-01 16:33:16   V6   16 2016-08-01 16:00:00
10 2016-08-01 16:54:16   V7   19 2016-08-01 16:00:00
11 2016-08-01 16:58:16   V7   17 2016-08-01 16:00:00
12 2016-08-01 17:13:16   V7   16 2016-08-01 17:00:00
13 2016-08-01 17:21:16   V6   16 2016-08-01 17:00:00
14 2016-08-01 17:23:42   V6   17 2016-08-01 17:00:00
15 2016-08-01 17:27:16   V6   17 2016-08-01 17:00:00
16 2016-08-01 17:28:16   V9   19 2016-08-01 17:00:00
17 2016-08-01 17:29:28   V7   16 2016-08-01 17:00:00
18 2016-08-01 17:42:08   V4   17 2016-08-01 17:00:00

Для приведенного выше примера, когда я делаю head(df1$Date_time_hour), я получаю это:

> head(df1$Date_time_hour)
[1] "2016-08-01 12:00:00 UTC" "2016-08-01 12:00:00 UTC" "2016-08-01 13:00:00 UTC" "2016-08-01 14:00:00 UTC" "2016-08-01 15:00:00 UTC"
[6] "2016-08-01 15:00:00 UTC"

Но с моим собственным фреймом данных Owndata, когда я делаю head(Owndata$Date_time_hour), я получаю это:

> head(Owndata$Date_time_hour)
[1] "2016-07-20 UTC" "2016-07-20 UTC" "2016-07-20 UTC" "2016-07-20 UTC" "2016-07-20 UTC" "2016-07-20 UTC"

Однако я знаю, что формат Date_time_hour в моих собственных данных правильный, так как:

> str(Owndata$Date_time_hour)
 POSIXct[1:2841756], format: "2016-07-20 00:00:00" "2016-07-20 00:00:00" "2016-07-20 00:00:00" "2016-07-20 00:00:00" "2016-07-20 00:00:00" "2016-07-20 00:00:00"

Просто еще одна подсказка:

> dput(head(Owndata))
structure(list(Date_time_hour = structure(c(1468972800, 1468972800, 
1468972800, 1468972800, 1468972800, 1468972800), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), Date = structure(c(17002, 17002, 17002, 
17002, 17002, 17002), class = "Date"), LN = c(0.407596172920513, 
0.407596172920513, 0.407596172920513, 0.407596172920513, 0.407596172920513, 
0.407596172920513)), .Names = c("Date_time_hour", "Date", "LN"
), row.names = c(NA, 6L), class = "data.frame")

Мой Owndata фрейм данных имеет 2841756 строк. Я не знаю, в этом ли причина ... Хотя это было бы странно ...

1 Ответ

2 голосов
/ 15 мая 2019

Я думаю, что поскольку каждая запись в df$Date_time_hour имеет время, установленное на 0:00, дисплей сжимается до даты без времени.

При добавлении одного часа к каждой записи будет отображаться время. Может быть, вы поднабор данных, где время установлено только 0:00, что объясняет это поведение.

require(lubridate)

require(lubridate)

df <- structure(list(Date_time_hour = structure(c(1468972800, 1468972800, 1468972800, 1468972800, 1468972800, 1468972800), 
                                                class = c("POSIXct",  "POSIXt"), tzone = "UTC"), 
                     Date = structure(c(17002, 17002, 17002,  17002, 17002, 17002), class = "Date")))

df$Date_time_hour + hours(1)

дает:

[1] "2016-07-20 01:00:00 UTC" "2016-07-20 01:00:00 UTC" "2016-07-20 01:00:00 UTC" "2016-07-20 01:00:00 UTC" "2016-07-20 01:00:00 UTC"
[6] "2016-07-20 01:00:00 UTC"
...