在 R 中将多列从字符转换为 POSIXct

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

我有多个带有多个日期/时间列的数据框,当我导入它们时,它们最初是字符变量,我想将它们转换为 POSIXct 格式。我也对其他日期/时间格式持开放态度。

这是我的一个数据帧的示例:

visit<-as.data.frame(structure(list(EncounterID=structure(c(1, 2, 3, 4, 5, 6)),
                      ICU_FIRST=structure(c("03-08-2018 12:00:00", "03-17-2018 05:32:00", "02-11-2018 09:15:00", "04-01-2019 15:10:00", 
                                            "04-30-2018 06:05:00", "04-18-2018 18:45:00")),
                      ICU_LAST=structure(c("03-10-2018 10:27:00", "03-17-2018 15:45:00", "02-27-2018 09:30:00", "04-05-2019 18:49:00", 
                                           "05-29-2018 06:48:00", "04-19-2018 19:33:00")))))

我尝试使用

mutate(across(starts_with()))
选项与 as.POSIXct 结合使用:

visit<-visit%>%
  mutate(across(as.POSIXct(starts_with("ICU"), format="%m-%d-%Y %H:%M")))

但我不断收到错误:

评估 as.POSIXct(starts_with(x), format = "%m-%d-%Y %H:%M") 时出现问题。

我也尝试过这个:

visit<-visit%>%
  mutate(across(starts_with("ICU"), as.POSIXct))

但我收到消息字符串不是标准的明确格式,据我了解,这是两个 ICU 列不是数字的结果。

理想情况下,我希望将此代码插入到全局函数中,但我试图让它首先适用于此数据框。

r dplyr tidyverse tidyr lubridate
1个回答
0
投票

一些部件丢失或损坏。我添加了

%S
并更正了函数的顺序。

library(dplyr, warn.conflicts = FALSE)

visit <- as.data.frame(structure(list(EncounterID=structure(c(1, 2, 3, 4, 5, 6)),
                                      ICU_FIRST=structure(c("03-08-2018 12:00:00", 
                                                            "03-17-2018 05:32:00", 
                                                            "02-11-2018 09:15:00", 
                                                            "04-01-2019 15:10:00", 
                                                            "04-30-2018 06:05:00", 
                                                            "04-18-2018 18:45:00")),
                                    ICU_LAST=structure(c("03-10-2018 10:27:00", 
                                                         "03-17-2018 15:45:00",
                                                         "02-27-2018 09:30:00", 
                                                         "04-05-2019 18:49:00", 
                                                         "05-29-2018 06:48:00",
                                                         "04-19-2018 19:33:00")))))

visit <- 
  visit |>
  mutate(across(starts_with("ICU"), 
                \(x) as.POSIXct(x, format="%m-%d-%Y %H:%M:%S")))
visit
#>   EncounterID           ICU_FIRST            ICU_LAST
#> 1           1 2018-03-08 12:00:00 2018-03-10 10:27:00
#> 2           2 2018-03-17 05:32:00 2018-03-17 15:45:00
#> 3           3 2018-02-11 09:15:00 2018-02-27 09:30:00
#> 4           4 2019-04-01 15:10:00 2019-04-05 18:49:00
#> 5           5 2018-04-30 06:05:00 2018-05-29 06:48:00
#> 6           6 2018-04-18 18:45:00 2018-04-19 19:33:00

创建于 2024-01-22,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.