1

我在 R 名称中有一个数据框作为数据。

data <- as.xts(read.zoo("data1.csv",sep=",",tz="" ,header=T))

格式的数据索引2004-01-04 09:44:00 IST

我应用了将索引更改为日期的操作

index(data) <- as.Date(index(data))

输出应该是2004-01-04系统产生2004-01-03的。

这在 Windows 中可以正常工作,但在 Linux 上不起作用。

4

2 回答 2

3

Arun 是正确的,问题出在语言环境上。您的数据具有印度标准时间戳,并且您具有美国语言环境,至少晚 10.5 小时。因此,时间09:44实际上是您所在时区的前一天晚上很晚。

日期和时间非常复杂,R 使用底层操作系统功能进行计算,这就是为什么你在不同的机器上看到不同的结果。Linux 符合 POSIX 并理解像“IST”这样的时区,这允许它对前一天晚上进行更改。Windows 没有,这就是为什么它将日期指定为01-04. 要在 Windows 上获取正确的时区更新,您需要指定时区的全名“亚洲/加尔各答”。维基百科有一个时区名称列表


编辑:实际上,R 附带一个文件,其中包含它接受的所有“大陆/城市”(奥尔森风格)名称。它存储在

file.path(R.home("share"), "zoneinfo", "zone.tab")

帮助页面上的示例?Sys.timezone告诉您如何以编程方式阅读它。


我发现这个lubridate包让事情变得更容易看到正在发生的事情。

library(lubridate)
x <- ymd_hms("2004-01-04 09:44:00 IST", tz = "Asia/Kolkata")
x
# [1] "2004-01-04 09:44:00 IST"
with_tz(x, "America/New_York")
# [1] "2004-01-03 23:14:00 EST"
于 2013-01-04T11:31:19.300 回答
1
Date <- c("2010-01-04 09:04:00", "2010-01-04 09:05:00")
Open <- c(5222.9, 5220.2)
Low <- c(5224.6, 5222.95)
High <- c(5220.1, 5218.6)
Close <- c(5220.35, 5222.95)
x <- data.frame(Date = Date, Open = Open, Low = Low, High = High, Close = Close)
as.Date(x$Date)

输出:

[1] "2010-01-04" "2010-01-04"

在我看来没问题。

Edit:

require(zoo)
data <- as.xts(read.zoo("data1.csv",sep=",",tz="" ,header=T))
> dput(data)

structure(c(5222.9, 5220.2, 5224.6, 5222.95, 5220.1, 5218.6, 
5220.35, 5222.95), .Dim = c(2L, 4L), .Dimnames = list(NULL, c("Open", 
"Low", "High", "Close")), index = structure(c(1262592240, 1262592300
), tzone = "", tclass = c("POSIXct", "POSIXt")), class = c("xts", 
"zoo"), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct", 
"POSIXt"), .indexTZ = "", tzone = "")

> as.Date(index(data))

[1] "2010-01-04" "2010-01-04"

在我的 Mac 上它工作正常。我怀疑您的系统语言环境设置错误。此外,您可能想在 R 中检查它。

这个命令Sys.getlocale()给你什么 inWindows和 in Linuxinside R

于 2013-01-04T08:31:57.673 回答