gpt4 book ai didi

r - 考虑 am/pm 和毫秒将字符转换为日期

转载 作者:行者123 更新时间:2023-12-05 01:13:47 27 4
gpt4 key购买 nike

我正在尝试使用下一个格式将字符转换为日期。我有下一个数据框 i (我在最后添加了 dput() 版本的数据框):

                     Date
1 Dec_28_2012_9:32:54:640PM
2 Dec_28_2012_9:33:07:310PM
3 Dec_28_2012_9:33:08:926PM
4 Dec_29_2012_5:51:14:626AM
5 Dec_29_2012_5:51:30:650AM
6 Dec_29_2012_5:54:22:473AM
7 Dec_29_2012_5:58:37:443AM
8 Jan_1_2012_12:03:53:123AM
9 Jan_1_2012_12:08:47:720AM
10 Jan_1_2012_12:11:39:503AM
11 Jan_1_2012_12:37:34:016PM
12 Jan_1_2012_12:37:37:440PM
13 Jan_1_2012_12:37:48:693PM
14 Jan_1_2012_12:38:29:443PM

如何查看日期变量的格式具有小时、分钟、秒、毫秒和上午/下午的格式。所有元素都用 _ 分隔.迄今为止,我一直试图进行交谈,但出现了以下错误:
strptime(i$Date,format="%M_%d_%Y_%H:%m:%s")
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA

也许我使用了错误的函数或函数内部缺少某些东西。此外,我不知道如何管理此字符变量中的 am/pm 以获取正确格式的日期。
dput()我的数据框版本是下一个:
i<-structure(list(Date = structure(1:14, .Label = c("Dec_28_2012_9:32:54:640PM", 
"Dec_28_2012_9:33:07:310PM", "Dec_28_2012_9:33:08:926PM", "Dec_29_2012_5:51:14:626AM",
"Dec_29_2012_5:51:30:650AM", "Dec_29_2012_5:54:22:473AM", "Dec_29_2012_5:58:37:443AM",
"Jan_1_2012_12:03:53:123AM", "Jan_1_2012_12:08:47:720AM", "Jan_1_2012_12:11:39:503AM",
"Jan_1_2012_12:37:34:016PM", "Jan_1_2012_12:37:37:440PM", "Jan_1_2012_12:37:48:693PM",
"Jan_1_2012_12:38:29:443PM"), class = "factor")), .Names = "Date", row.names = c(NA,
-14L), class = "data.frame")

还有 sessionInfo()我的 R session 是下一个:
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Spanish_Ecuador.1252 LC_CTYPE=Spanish_Ecuador.1252 LC_MONETARY=Spanish_Ecuador.1252
[4] LC_NUMERIC=C LC_TIME=Spanish_Ecuador.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] chron_2.3-45 lubridate_1.3.3

loaded via a namespace (and not attached):
[1] digest_0.6.4 memoise_0.1 plyr_1.8.1 Rcpp_0.11.2 stringr_0.6.2 tools_3.0.2

非常感谢您的帮助。

最佳答案

除了修复日期格式字符串之外,最后一个冒号需要更改为小数点,以便正确解析毫秒(或完全解析)。也感谢@DavidArenburg 的评论。

我在数据框中为每个转换创建了一个新列,以便您可以看到每个步骤的结果。

# Change last colon to decimal point (period)
i$Date1 = gsub("(.*):(.*)(AM|PM)", "\\1\\.\\2\\3", i$Date)

# Parse date with milliseconds
i$NewDate = strptime(i$Date1, format="%b_%d_%Y_%I:%M:%OS%p")

i

Date Date1 NewDate
1 Dec_28_2012_9:32:54:640PM Dec_28_2012_9:32:54.640PM 2012-12-28 21:32:54.640
2 Dec_28_2012_9:33:07:310PM Dec_28_2012_9:33:07.310PM 2012-12-28 21:33:07.310
3 Dec_28_2012_9:33:08:926PM Dec_28_2012_9:33:08.926PM 2012-12-28 21:33:08.926
...
13 Jan_1_2012_12:37:48:693PM Jan_1_2012_12:37:48.693PM 2012-01-01 12:37:48.693
14 Jan_1_2012_12:38:29:443PM Jan_1_2012_12:38:29.443PM 2012-01-01 12:38:29.443

关于r - 考虑 am/pm 和毫秒将字符转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28033690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com