繁体   English   中英

在 R 中将 POSIXct 格式从 YYYY-MM-DD 更改为 MM-DD-YYYY

[英]Change POSIXct format from YYYY-MM-DD to MM-DD-YYYY in R

新 R 用户在这里。 我使用 read_xlsx 函数导入一个 xlxs。 两列我读为日期,其余为文本或数字。 之后,我无法将“EDD”列从 YYYY-MM-DD 转换为 MM-DD-YYYY。 Str 显示 POSIXct。

'''MICAP <- read_xlsx("~/Copy of Joint MICAP Report 0700 CDT (004).xlsx", sheet = "OPEN ORDERS for MICAP Reporting", col_names = TRUE, , col_types = c("text", "text ", "text", "text", "text", "text", "text", "text", "text", "text", "date", "numeric", "text", "date", “文本”,“文本”,“文本”,“文本”,“文本”))'''

当我调用 str(MICAP) 时,我的列 EDD(日期)显示为 POSIXct,但我无法更改。

我只关心 EDD 更改为 MM/DD/YYYY

这就是我所说的超级分类的意思:

format.myPOSIX <- function(x, tz = "", usetz = FALSE, ...) {
  dots <- list(...)
  fmt <- NA
  if ("format" %in% names(dots)) {
    fmt <- dots$format
    dots$format <- NULL
  }
  if (inherits(x, "Date")) {
    if (is.na(fmt)) fmt <- "%m/%d/%Y"
    func <- match.fun("format.Date")
  } else { # POSIXt
    if (is.na(fmt)) fmt <- "%m/%d/%Y %H:%M:%S"
    func <- match.fun("format.POSIXct")
  }
  do.call(func, c(list(x, tz = tz, usetz = usetz), format = fmt, dots))
}
print.myPOSIX <- function(x, tz = "", usetz = FALSE, ...) {
  print(format.myPOSIX(x, tz = tz, usetz = usetz))
}

例如,由于您的数据不可用。

set.seed(42)

datevec <- sort(Sys.Date() + sample(20, size=3))
class(datevec) <- c("myPOSIX", class(datevec))
datevec
# [1] "10/23/2021" "10/27/2021" "11/08/2021"
diff(datevec)
# Time differences in days
# [1]  4 12

psxvec <- sort(Sys.time() + sample(2000, size=3))
class(psxvec) <- c("myPOSIX", class(psxvec))
psxvec
# [1] "10/22/2021 09:55:28" "10/22/2021 09:56:47" "10/22/2021 09:58:02"
diff(psxvec)
# Time differences in mins
# [1] 1.316667 1.250000

显示打印格式为"%m/%d/%Y"但数字运算仍然有效。

这也应该适用于data.frame和类似的结构:

data.frame(dt = datevec, psx = psxvec)
#           dt                 psx
# 1 10/23/2021 10/22/2021 09:58:02
# 2 10/27/2021 10/22/2021 09:59:21
# 3 11/08/2021 10/22/2021 10:00:36
tibble::tibble(dt = datevec, psx = psxvec)
# # A tibble: 3 x 2
#   dt         psx                
#   <date>     <dttm>             
# 1 2021-10-23 2021-10-22 09:58:02
# 2 2021-10-27 2021-10-22 09:59:21
# 3 2021-11-08 2021-10-22 10:00:36
data.table::data.table(dt = datevec, psx = psxvec)
#            dt                 psx
#     <myPOSIX>           <myPOSIX>
# 1: 10/23/2021 10/22/2021 09:58:02
# 2: 10/27/2021 10/22/2021 09:59:21
# 3: 11/08/2021 10/22/2021 10:00:36

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM