Применить strptime к data.frame - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть объект data.frame, который содержит отдельные столбцы для года, месяца и дня.я хочу преобразовать это в один столбец объектов типа POSIXlt.поэтому мой data.frame выглядит как

test_df <- data.frame(matrix(data = as.integer(c(1900,1900,1900,1,1,1,1,2,3)), 
                             nrow = 3, ncol = 3))
colnames(test_df) <- c("Year","Month","Day")

, если я пытаюсь преобразовать отдельную строку следующим образом

paste(test_df$Year[1], test_df$Month[1], test_df$Day[1], sep = "/") %>%
as.factor() %>% 
strptime(format = "%Y/%m/%d")

я получаю объект класса POSIXlt.однако, если я пытаюсь использовать функцию применения, такую ​​как

test_df$date <- apply(test_df, 1, 
                      function(x) 
                      strptime(as.factor(paste(x[1], x[2], x[3], 
                                         sep = "/")), 
                               format = "%Y/%m/%d"))

, я получаю список объектов в этом новом столбце.Что я могу сделать, чтобы поддерживать класс POSIXlt при использовании apply?

1 Ответ

0 голосов
/ 30 ноября 2018

Лучше использовать POSIXct вместо POSIXlt в кадрах данных.Следующие должны делать ту же работу:

library(dplyr)

df <- test_df %>%
  mutate(date = as.POSIXct(paste(Year, Month, Day), format = "%Y %m %d"))

str(df)
# 'data.frame': 3 obs. of  4 variables:
#   $ Year : int  1900 1900 1900
# $ Month: int  1 1 1
# $ Day  : int  1 2 3
# $ date : POSIXct, format: "1900-01-01" "1900-01-02" "1900-01-03"
...