【问题标题】:plot. zoo "invalid 'ylim' value"阴谋。动物园“无效的'ylim'值”
【发布时间】:2019-08-07 08:53:01
【问题描述】:

当我尝试使用 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")

头(我的数据)

            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

输入(我的数据)

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")

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

头(我的数据2)

            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

输入(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

【问题讨论】:

    标签: r csv zoo


    【解决方案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"
    

    【讨论】:

    • 是的,这解决了我的问题。我添加了一个 .csv 文件的视图来发布。我不确定您是否是指输入。如果可能的话,我仍然想知道是什么导致了“值”这个奇怪的非数字向量。由于目标是使一切自动化,因此代码行数越少越好。谢谢。
    • 显示的文本不是 csv 文件,也没有任何选项卡,因此发布时可能丢失了某些内容。
    • 这是在纯文本编辑器 (i.imgur.com/lMwInb6.png) 中打开的 csv 文件的原始版本。我只删除了行以使其更短。这是一个选项卡,当我想用​​ Excel 或 R 打开它时,选项卡是唯一可以正确导入它的选项。我没有看到任何其他可能的选项,它肯定不是单个或多个空格。
    • 尝试阅读前几行并检查十六进制代码:sapply(readLines("myfile", 6), charToRaw)
    • 将输出添加到帖子中。现在,即使通过 Vim 用逗号替换所有“标签”,我在 R 上也面临同样的错误。i.imgur.com/ZCLdwM7.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多