xts 转换在 7 行数据帧上失败
xts conversion fails on 7 line data frame
我正在尝试读取一个 csv 文件并创建一个 xts 对象。 xts 转换函数在 7 行输入文件上失败。错误是:
xts(Lagoon$Inst, Lagoon$time) 错误:
'order.by' 不能包含 'NA'、'NaN' 或 'Inf'
密码是:
require(xts)
> Lagoon <- read.csv("Mara/csv/test/X8.csv")
> Lagoon
time Inst
1 00:45:00 03/10/2019 5.76
2 01:00:00 03/10/2019 5.77
3 01:15:00 03/10/2019 5.81
4 01:30:00 03/10/2019 5.61
5 01:45:00 03/10/2019 5.46
6 02:00:00 03/10/2019 5.40
7 02:15:00 03/10/2019 5.38
> Lagoon$time <- as.POSIXlt(Lagoon$time, format = "%H:%M:%S %m/%d/%Y")
> Lagoon
time Inst
1 2019-03-10 00:45:00 5.76
2 2019-03-10 01:00:00 5.77
3 2019-03-10 01:15:00 5.81
4 2019-03-10 01:30:00 5.61
5 2019-03-10 01:45:00 5.46
6 2019-03-10 02:00:00 5.40
7 2019-03-10 02:15:00 5.38
> xtsLagoon <- xts(Lagoon$Inst,Lagoon$time)
Error in xts(Lagoon$Inst, Lagoon$time) :
'order.by' cannot contain 'NA', 'NaN', or 'Inf'
>
我尝试将真实的输入文件切成越来越小的块;上面的 csv 文件是一个最小的可重现示例。删除一行数据会创建一个文件,该文件确实正确转换为 xts 对象。
请注意,当我在尝试转换之前列出 Lagoon 数据框时,它看起来不错(没有 NA、Nan 或 Inf)。
我的xts版本是最新的(0.12.1)
我做错了什么?这是 xts 转换函数中的错误吗?任何帮助表示赞赏!
这可能是最后两个元素转换的问题(因为它 returns NA
与 as.POSIXct
- 可能是由于夏令时)。一种选择是使用 parse_date
(parsedate
) 转换为 Datetime
对象,然后使用 xts
library(parsedate)
Lagoon$time <- parse_date(Lagoon$time)
xts::xts(Lagoon$Inst,Lagoon$time)
[,1]
2019-03-10 00:45:00 5.76
2019-03-10 01:00:00 5.77
2019-03-10 01:15:00 5.81
2019-03-10 01:30:00 5.61
2019-03-10 01:45:00 5.46
2019-03-10 02:00:00 5.40
2019-03-10 02:15:00 5.38
数据
Lagoon <- structure(list(time = c("00:45:00 03/10/2019", "01:00:00 03/10/2019",
"01:15:00 03/10/2019", "01:30:00 03/10/2019", "01:45:00 03/10/2019",
"02:00:00 03/10/2019", "02:15:00 03/10/2019"), Inst = c(5.76,
5.77, 5.81, 5.61, 5.46, 5.4, 5.38)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7"))
问题中没有显示输入文件,所以我们假设我们在最后的注释中生成了可重现的文件。使用 read.csv.zoo
并确保将时区指定为 "UTC"
,因为在您当地的时区,02:15 在 03/10/2019 不存在,因为从标准到夏令时的变化节省时间。
(交替使用问题中的代码,除了 (1) 首先使用 Sys.setenv(TZ = "UTC")
将会话的时区设置为 UTC 和 (2) 使用 as.POSIXct
而不是 as.POSIXlt
。)
library(xts)
z <- read.csv.zoo("X8.csv", format = "%H:%M:%S %m/%d/%Y", tz = "UTC")
x <- as.xts(z)
备注
Lines <- "time,Inst
00:45:00 03/10/2019,5.76
01:00:00 03/10/2019,5.77
01:15:00 03/10/2019,5.81
01:30:00 03/10/2019,5.61
01:45:00 03/10/2019,5.46
02:00:00 03/10/2019,5.40
02:15:00 03/10/2019,5.38"
cat(Lines, file = "X8.csv")
我正在尝试读取一个 csv 文件并创建一个 xts 对象。 xts 转换函数在 7 行输入文件上失败。错误是:
xts(Lagoon$Inst, Lagoon$time) 错误: 'order.by' 不能包含 'NA'、'NaN' 或 'Inf'
密码是:
require(xts)
> Lagoon <- read.csv("Mara/csv/test/X8.csv")
> Lagoon
time Inst
1 00:45:00 03/10/2019 5.76
2 01:00:00 03/10/2019 5.77
3 01:15:00 03/10/2019 5.81
4 01:30:00 03/10/2019 5.61
5 01:45:00 03/10/2019 5.46
6 02:00:00 03/10/2019 5.40
7 02:15:00 03/10/2019 5.38
> Lagoon$time <- as.POSIXlt(Lagoon$time, format = "%H:%M:%S %m/%d/%Y")
> Lagoon
time Inst
1 2019-03-10 00:45:00 5.76
2 2019-03-10 01:00:00 5.77
3 2019-03-10 01:15:00 5.81
4 2019-03-10 01:30:00 5.61
5 2019-03-10 01:45:00 5.46
6 2019-03-10 02:00:00 5.40
7 2019-03-10 02:15:00 5.38
> xtsLagoon <- xts(Lagoon$Inst,Lagoon$time)
Error in xts(Lagoon$Inst, Lagoon$time) :
'order.by' cannot contain 'NA', 'NaN', or 'Inf'
>
我尝试将真实的输入文件切成越来越小的块;上面的 csv 文件是一个最小的可重现示例。删除一行数据会创建一个文件,该文件确实正确转换为 xts 对象。
请注意,当我在尝试转换之前列出 Lagoon 数据框时,它看起来不错(没有 NA、Nan 或 Inf)。
我的xts版本是最新的(0.12.1)
我做错了什么?这是 xts 转换函数中的错误吗?任何帮助表示赞赏!
这可能是最后两个元素转换的问题(因为它 returns NA
与 as.POSIXct
- 可能是由于夏令时)。一种选择是使用 parse_date
(parsedate
) 转换为 Datetime
对象,然后使用 xts
library(parsedate)
Lagoon$time <- parse_date(Lagoon$time)
xts::xts(Lagoon$Inst,Lagoon$time)
[,1]
2019-03-10 00:45:00 5.76
2019-03-10 01:00:00 5.77
2019-03-10 01:15:00 5.81
2019-03-10 01:30:00 5.61
2019-03-10 01:45:00 5.46
2019-03-10 02:00:00 5.40
2019-03-10 02:15:00 5.38
数据
Lagoon <- structure(list(time = c("00:45:00 03/10/2019", "01:00:00 03/10/2019",
"01:15:00 03/10/2019", "01:30:00 03/10/2019", "01:45:00 03/10/2019",
"02:00:00 03/10/2019", "02:15:00 03/10/2019"), Inst = c(5.76,
5.77, 5.81, 5.61, 5.46, 5.4, 5.38)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7"))
问题中没有显示输入文件,所以我们假设我们在最后的注释中生成了可重现的文件。使用 read.csv.zoo
并确保将时区指定为 "UTC"
,因为在您当地的时区,02:15 在 03/10/2019 不存在,因为从标准到夏令时的变化节省时间。
(交替使用问题中的代码,除了 (1) 首先使用 Sys.setenv(TZ = "UTC")
将会话的时区设置为 UTC 和 (2) 使用 as.POSIXct
而不是 as.POSIXlt
。)
library(xts)
z <- read.csv.zoo("X8.csv", format = "%H:%M:%S %m/%d/%Y", tz = "UTC")
x <- as.xts(z)
备注
Lines <- "time,Inst
00:45:00 03/10/2019,5.76
01:00:00 03/10/2019,5.77
01:15:00 03/10/2019,5.81
01:30:00 03/10/2019,5.61
01:45:00 03/10/2019,5.46
02:00:00 03/10/2019,5.40
02:15:00 03/10/2019,5.38"
cat(Lines, file = "X8.csv")