在 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']])
效果很好。
我是 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']])
效果很好。