我在R中有以下字符变量:
> d <- "06/01/2018"
> class(d)
> "character"
我想将其转换为Date,更改默认日期格式,并将数据类型保留为Date,因此我从:
开始> d <- as.Date(s, format = "%m/%d/%Y")
> class(d)
> "Date"
一切都很好,但是默认日期格式以年份而不是月份开头 - 我希望它以月份开头:
> d
> "2018-06-01"
因此,如果我再次格式化,则日期从现在的月份开始,但它会将变量恢复为字符!
> d <- format(d, "%m/%d/%Y")
> d
> "06/01/2018"
> class(d)
> character
如何在不转换回字符的情况下以新的(非默认)格式保留d作为日期?
答案 0 :(得分:0)
1)chron print.Date
将始终使用yyyy-mm-dd但chron将使用mm / dd / yy:
library(chron)
d <- "06/01/2018"
as.chron(d)
## [1] 06/01/18
2)子类您可以定义以所需方式显示的Date子类:
as.subDate <- function(x, ...) UseMethod("as.subDate")
as.subDate.character <- function(x, ...) {
structure(as.Date(x, "%m/%d/%Y"), class = c("subDate", "Date"))
}
format.subDate <- function(x, ...) format.Date(x, "%m/%d/%Y")
as.subDate(d)
## [1] "06/01/2018"
您可能需要添加更多方法,具体取决于您要执行的操作。
答案 1 :(得分:0)
只需在控制台输入变量名称,即可使用print
的默认参数进行打印。如果您需要其他格式,请更改print
的工作方式{/ 1}}:
Date
这只是标准的Sys.Date()
# [1] "2018-06-04
print.Date <- function (x, max = NULL, ...) {
if (is.null(max))
max <- getOption("max.print", 9999L)
n_printed <- min(max, length(x))
formatted <- strftime(x[seq_len(n_printed)], format = "%m/%d/%Y")
print(formatted, max = max, ...)
if (max < length(x)) {
cat(" [ reached getOption(\"max.print\") -- omitted",
length(x) - max, "entries ]\n")
} else if (length(x) == 0L) {
cat(class(x)[1L], "of length 0\n")
}
invisible(x)
}
Sys.Date()
# [1] "06/04/2018"
功能,只需进行一些编辑。
但我必须对此发表评论:
我想将其转换为日期,更改默认日期格式,并将数据类型保留为日期
print.Date
向量没有格式。将格式转换为Date
向量时,可以使用格式(这是character
所做的),但print
实际上只是具有不同类的Date
。整数给出了纪元(1970-01-01)之后的天数:
integer