R Изменить класс столбца с числового на временное - PullRequest
0 голосов
/ 08 октября 2019

Я новичок в R, и я использую его для анализа данных и достиг контрольно-пропускного пункта. Я хочу изменить класс двух моих столбцов (7 и 8) в моем кадре данных с числа на время. На данный момент они отображаются в POSIX, и я хочу, чтобы они отображались как раз в формате H:M Я пробовал:

 library(tidyverse)
 library(lubridate)
 df[7, 8] <- lapply(df[7, 8], 
                     as.POSIXct, tz = "GMT", format,
                     tryFormats = c("%H:%M"),
                     optional = TRUE)

, и появляется следующее сообщение об ошибке:

Ошибка в as.POSIXct.default (origin, tz = "GMT", ...): не знаю, как преобразовать 'origin' в класс “POSIXct”

Любая помощь будет высоко ценится

Вот пример из столбца 7 и 8 моего фрейма данных

df <- structure(list(MAU_visit_time = c(42161.5416666667, 42154.8368055556, 
42160.6666666667, 42154.9583333333, NA), time_seen = c(42161.625, 
42154.9027777778, 42160.7222222222, 42154.0416666667, 42154.66875
)), class = "data.frame", row.names = c(NA, -5L))

Любая помощьбудет высоко ценится

1 Ответ

0 голосов
/ 08 октября 2019

Вот что вы можете сделать. Я считаю, что ячейки - это секунды, поэтому вы можете использовать

library(lubridate)
df$MAU_visit_time <- seconds_to_period(df$MAU_visit_time)
df$time_seen <- seconds_to_period(df$time_seen)

#             MAU_visit_time                 time_seen
# 1 11H 42M 41.5416666667006S           11H 42M 41.625S
# 2 11H 42M 34.8368055555984S 11H 42M 34.9027777778028S
# 3 11H 42M 40.6666666667006S 11H 42M 40.7222222221972S
# 4 11H 42M 34.9583333332994S 11H 42M 34.0416666667006S
# 5                      <NA> 11H 42M 34.6687499999971S
# -------------------------------------------------------------------------
# To extract hour(h), minute(m) and second(s)
hour(df$MAU_visit_time[1])
#11
minute(df$MAU_visit_time[1])
#42
second(df$MAU_visit_time[1])
#41.54167
hms(df$MAU_visit_time[1])
#"11H 42M 41.5416666667006S"

Обновление

Если вы хотите отформатировать столбец таким образом, чтобы 11:42:41.625, вы можете отформатировать его, используя paste, но помните, вы теряете формат даты lubridate (столбцы будут символами).

df$MAU_visit_time <- paste(hour(df$MAU_visit_time),minute(df$MAU_visit_time),second(df$MAU_visit_time),sep=":")
df$time_seen <- paste(hour(df$time_seen), minute(df$time_seen), second(df$time_seen),sep=":")
# -------------------------------------------------------------------------

#           MAU_visit_time              time_seen
# 1 11:42:41.5416666667006           11:42:41.625
# 2 11:42:34.8368055555984 11:42:34.9027777778028
# 3 11:42:40.6666666667006 11:42:40.7222222221972
# 4 11:42:34.9583333332994 11:42:34.0416666667006
# 5               NA:NA:NA 11:42:34.6687499999971

Надеюсь, это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...