将strptime应用于data.frame

问题描述 投票:0回答:1

我有一个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"))

我最终获得该新列中的列表对象。使用apply时,如何维护POSIXlt类?

r apply strptime
1个回答
1
投票

在数据框架中使用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"
© www.soinside.com 2019 - 2024. All rights reserved.