在 R 中将 "character" 转换为 "POSIX"

Converting "character" to "POSIX" in R

我是 R 的新手,正在尝试在 R 中复制我当前的 excel 报告。我有一个多列 csv 文件,其中一列包含格式为“4/18/2022”的时间戳, 2:15 PM”(直接从数据文件复制)。最终我需要提取 csv 中每一行的周数和天数。

我已经将字符转换为 POSIX。

datetest = ("4/18/2022, 12:53:22 AM")
datetest1 <- mdy_hms(datetest)
print(datetest1)
sapply(datetest1, class)

产生

> datetest = ("4/18/2022, 12:53:22 AM")
> datetest1 <- mdy_hms(datetest)
> print(datetest1)
[1] "2022-04-18 00:53:22 UTC"
> sapply(datetest1, class)
     [,1]     
[1,] "POSIXct"
[2,] "POSIXt" 

但我的问题是当我尝试转换整个列时

#import CSV
RawData <- read.csv("data.csv",header = TRUE, ",")
#convert TS to POSIX
#column header is Date.Time.Opened
escRawData[['Date.Time.Opened']] <- mdy_hms(escRawData[['Date.Time.Opened']])

这给了我这个

> escRawData <-read.csv("report1650637729324.csv",header = TRUE, ",")
> #convert TS to POSIX
> escRawData[['Date.Time.Opened']] <- mdy_hms(escRawData[['Date.Time.Opened']])
Warning message:
All formats failed to parse. No formats found. 

已清除数据帧中的所有数据。我使用 sapply 检查 CSV 中的数据类型,我知道数据是“字符”。

我已经 read/watched 一些描述 lubridate 和 POSIXlt 命令的教程都或多或少地给出了“找不到格式”的相同错误,所以很明显,我遗漏了一些基本的东西.任何帮助将不胜感激。

使用您当前的代码,一个错误的日期条目(format-wise 或其他)会破坏整个列的转换。您可以事先检查原始数据,或将它们转换 rowwise 并检查失败的转换 (NAs),例如:

library(dplyr)
library(lubridate)

converted_data <-
    escRawData %>%
      rowwise %>% ## important
      mutate(date_converted = mdy_hms(Date.Time.Opened))

## which rows went wrong?
converted_data %>%
    filter(is.na(date_converted))

好的大家,我发现我做错了什么。 @KU99 的评论帮助我弄明白了。我的实际数据文件在时间戳中不包含秒数。当我改为使用

escRawData[['Date.Time.Opened']] <- mdy_hm(escRawData[['Date.Time.Opened']])

效果很好。