情节。动物园“无效的'ylim'值”

时间:2019-08-07 08:53:01

标签: r csv zoo

当我尝试使用Zoo软件包绘制时间序列数据时,我会遇到: plot.window(...)中的错误:无效的'ylim'值。虽然plot.zoo给了我错误,但plot.ts可以正常工作。 plot(mydata)也给出相同的错误。

数据已从.csv文件加载,如下所示:

    Value
03.01.2011  6.2100
04.01.2011  6.4280
05.01.2011  6.7290
06.01.2011  6.6000
07.01.2011  6.7970
...
mydata <- read.zoo(mydata, sep = "\t", header = TRUE, format = "%d.%m.%Y", fileEncoding = "UTF-16")
  

head(mydata)

            Value
2011-01-03  6.210
2011-01-04  6.428
2011-01-05  6.729
2011-01-06  6.600
2011-01-07  6.797
  

dput(mydata)

structure(c(" 6.210", " 6.428", " 6.729", " 6.600", " 6.797", " ..."), 
.Dim = c(2023L, 1L), .Dimnames = list(NULL, "Value"), index = 
structure(c(14977, 14978, 14979, 14980, 14981, ...), class = "Date"), class = "zoo")

来自相同来源和背景的data(mydata2)与plot.zoo完美配合。相反,它给了我不同的dput()输出。 值不在“(双引号)之间(也没有多余的空格)”,我想知道这是否是问题所在。

  

head(mydata2)

            Value
2010-12-31 533.99
2011-01-03 541.30
2011-01-04 548.33
2011-01-05 544.73
2011-01-06 556.61
  

dput(mydata2)

structure(c(533.99, 541.3, 548.33, 544.73, 556.61, ...), 
.Dim = c(2023L, 1L), .Dimnames = list(NULL, "Value"), index = 
structure(c(14974, 14977, 14978, 14979, 14980, ...), class = "Date"), class = "zoo")

我已经使用上面提供的read.zoo来将两个.csv文件加载到R中。两个文件都使用制表符(“ \ t”)作为分隔符,日期格式为03.01.2019(“%d。%m。% Y”),文件编码(“ UTF-16”)。我不明白为什么一个数据加载了多余的空格和引号,我认为这是plot.zoo函数出错的原因。

  

sapply(readLines(mydata,6,skipNul = TRUE),charToRaw)

$`\tValue`
[1] 09 43 6c 6f 73 65

$`03.01.2011\t6.2100`
 [1] 30 33 2e 30 31 2e 32 30 31 31 09 36 2e 32 31 30 30

$`04.01.2011\t6.4280`
 [1] 30 34 2e 30 31 2e 32 30 31 31 09 36 2e 34 32 38 30

$`05.01.2011\t6.5900`
 [1] 30 35 2e 30 31 2e 32 30 31 31 09 36 2e 35 39 30 30

$`06.01.2011\t6.6000`
 [1] 30 36 2e 30 31 2e 32 30 31 31 09 36 2e 36 30 30 30

$`07.01.2011\t6.7970`
 [1] 30 37 2e 30 31 2e 32 30 31 31 09 36 2e 37 39 37 30

1 个答案:

答案 0 :(得分:1)

该问题未提供输入,因此我们无法确切知道发生了什么,但是大概在输入中存在无法理解且无法将其呈现为空格或完全未呈现的字符,因此它认为输入是字符数据。

read.zoo使用read.table,如果将其与它一起阅读,则可能会遇到相同的问题。

您可以强制数据为数字。这对我有用:

library(zoo)

z <- structure(c(" 6.210", " 6.428", " 6.729", " 6.600", " 6.797"), 
.Dim = c(5L, 1L), .Dimnames = list(NULL, "Value"), index = 
structure(c(14977, 14978, 14979, 14980, 14981), class = "Date"), class = "zoo")

zz <- zoo(array(as.numeric(coredata(z)), dim(z)), index(z))
str(zz)

给予:

‘zoo’ series from 2011-01-03 to 2011-01-07
  Data: num [1:5, 1] 6.21 6.43 6.73 6.6 6.8
  Index:  Date[1:5], format: "2011-01-03" "2011-01-04" "2011-01-05" "2011-01-06" "2011-01-07"