我可以从CSV文件中读取日期,以获得日期和时间的列表。我的输入看起来像这样:
2018/10/11 15:0:0
我读到p1 $ hour。我在POSIXct中需要它,所以我转换了字符串:
p1$timeUtc <- as.POSIXct(p1$hour,tz='Asia/Calcutta')
因为我的CSV文件中的时间来自印度的IST时区。
当我观察到p1 $ timeUtc的属性时,我看到了
attributes(p1$timeUtc)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] "Asia/Calcutta"
如果我要求在R控制台(在RStudio中)输入条目的值,我会看到
p1$timeUtc[[1]]
[1] "2018-10-11 15:00:00 IST"
$ tzone属性控制使用的显示格式。如果将其更改为UTC,我会看到同一时间显示在不同的区域:
> attr(p1$timeUtc,'tzone') <- 'UTC'
> p1$timeUtc[[1]]
[1] "2018-10-11 09:30:00 UTC"
> attr(p1$timeUtc,'tzone') <- 'Asia/Calcutta'
> p1$timeUtc[[1]]
[1] "2018-10-11 15:00:00 IST"
所以我可以在不更改变量值的情况下影响POSIXct变量的显示格式。
但是,如果csv数据恰好是午夜2018/10/12 00:0:0
,则控制台输出将忽略时间:
> p1$timeUtc[[2]]
[1] "2018-10-12 IST"
这有点令人困惑。我希望它是'%Y-%m-%d %H:%M %Z'
。
此外,当我使用View(p1)
在RStudio中显示数据表时,似乎使用了tzone属性,但最后省略了“ IST”。但是它会在深夜打印2018-10-12 00:00:00
。 (但这也许只是因为我正在查看列表,而不是一个值?)
我知道我可以将POSIXct转换为字符串并根据需要打印出来。但是我不想那样做。我想指定R Console如何显示POSIXct变量,以及RStudio View()
如何显示变量。我可以更改用于显示的时区。有没有办法更改其余格式?我在options
中寻找通用控件,但找不到办法。
答案 0 :(得分:1)
您可以将print
方法替换为该类。查看print.POSIXct
的代码:
function (x, tz = "", usetz = TRUE, ...)
{
max.print <- getOption("max.print", 9999L)
FORM <- if (missing(tz))
function(z) format(x, usetz = usetz)
else function(z) format(x, tz = tz, usetz = usetz)
if (max.print < length(x)) {
print(FORM(x[seq_len(max.print)]), ...)
cat(" [ reached getOption(\"max.print\") -- omitted",
length(x) - max.print, "entries ]\n")
}
else if (length(x))
print(FORM(x), max = max.print, ...)
else cat(class(x)[1L], "of length 0\n")
invisible(x)
}
因此,格式化是通过在方法内部创建的FORM
函数完成的。您可以通过对代码进行几次编辑来创建新方法,只要它名为print.POSIXct
,R就会使用它。
as.POSIXct("2018-12-17 00:00:00", tz = "UTC")
# [1] "2018-12-17 UTC"
print.POSIXct <- function (x, tz = "", usetz = TRUE, ...)
{
max.print <- getOption("max.print", 9999L)
FORM <- if (missing(tz))
function(z) format(x, usetz = usetz, format = "%Y-%m-%d %H:%M:%S")
else function(z) format(x, tz = tz, usetz = usetz, format = "%Y-%m-%d %H:%M:%S")
if (max.print < length(x)) {
print(FORM(x[seq_len(max.print)]), ...)
cat(" [ reached getOption(\"max.print\") -- omitted",
length(x) - max.print, "entries ]\n")
}
else if (length(x))
print(FORM(x), max = max.print, ...)
else cat(class(x)[1L], "of length 0\n")
invisible(x)
}
as.POSIXct("2018-12-17 00:00:00", tz = "UTC")
# [1] "2018-12-17 00:00:00 UTC"
通常,您可以通过创建名为generic.class
的函数来覆盖任何S3类的方法,其中generic
是通用函数的名称,class
是该方法适用的类