【问题标题】:R: converting data frame to zoo: Error in as.matrix.data.frame(x)R:将数据框转换为动物园:as.matrix.data.frame(x) 中的错误
【发布时间】:2013-02-22 17:58:25
【问题描述】:

我需要合并两个时间序列,似乎最好使用 merge.zoo。当我尝试将两个数据帧中的每一个都转换为 zoo 时,我收到以下错误:

zoo(FNCC_short)  
Error in as.matrix.data.frame(x) :   
dims [product 10] do not match the length of object [19]

R 在哪里找到长度为 19 的?我有:

> class(FNCC_short)  
[1] "data.frame"  
> length(FNCC_short)  
[1] 2  
> length(FNCC_short[,1])  
[1] 10  
> length(FNCC_short[,2])  
[1] 10  

我无法使用read.zoo(...) 获取数据,因为 csv 时间字段的格式不正确 - 我必须先读取 csv 文件,然后修复时间格式。

这是 FNCC_short:

> FNCC_short  
             time_FNCC  FNCC  
1  2013-02-07 09:00:00 2.556  
2  2013-02-07 09:01:00 2.556  
3  2013-02-07 09:02:00 2.552  
4  2013-02-07 09:03:00 2.552  
5  2013-02-07 09:04:00 2.552  
6  2013-02-07 09:05:00 2.552  
7  2013-02-07 09:06:00 2.552  
8  2013-02-07 09:07:00 2.539  
9  2013-02-07 09:08:00 2.539  
10 2013-02-07 09:09:00 2.539  

> class(FNCC_short$time_FNCC)  
[1] "POSIXlt" "POSIXt"   

所以,第一列是 POSIX 时间。为什么这个简单的转换不起作用?

【问题讨论】:

  • 您可以在read.zoo 中使用format 参数来指定正确的格式..
  • -1 没有提供dput 输出,也没有做出合理的努力来阅读文档,即使在被要求同时做这两件事之后。

标签: r zoo


【解决方案1】:

您可以使用指定format 选项将第一列和第二列转换为动物园索引。

Lines <- 'time_FNCC time FNCC  ## I had to add the 'time' column name here
1  2013-02-07 09:00:00 2.556  
2  2013-02-07 09:01:00 2.556  
3  2013-02-07 09:02:00 2.552  
4  2013-02-07 09:03:00 2.552  
5  2013-02-07 09:04:00 2.552  
6  2013-02-07 09:05:00 2.552  
7  2013-02-07 09:06:00 2.552  
8  2013-02-07 09:07:00 2.539  
9  2013-02-07 09:08:00 2.539  
10 2013-02-07 09:09:00 2.539'

dat <- read.zoo(text = Lines, index = 1:2, tz = "")

dat
2013-02-07 09:00:00 2013-02-07 09:01:00 2013-02-07 09:02:00 2013-02-07 09:03:00 
              2.556               2.556               2.552               2.552 
2013-02-07 09:04:00 2013-02-07 09:05:00 2013-02-07 09:06:00 2013-02-07 09:07:00 
              2.552               2.552               2.552               2.539 
2013-02-07 09:08:00 2013-02-07 09:09:00 
              2.539               2.539 

【讨论】:

  • 不幸的是,这并不能解决我的 data.frame 问题。实际数据集要长得多,因此将其转换为文本是不切实际的。我在 zoo() 中没有看到“格式”选项,仅在 read.zoo() 中没有看到,它不接受 data.frame。
  • @user2069819 我的回答是针对您的陈述我无法使用 read.zoo(...) 获取数据,因为 csv 时间字段的格式不正确 .不,你可以。现在我想你的意思是,你已经阅读了你的数据并且你想使用 read.zoo 重新阅读它?你能dput(head(data_frame))看看为什么你不能把它转换成动物园吗?
  • user2069819,答案使用text= 使其可重现。您可以使用相同的命令将 'text=...' 替换为 'myfile.txt',假设您想从文件中读取它。关于使用read.zoo 的完整小插图以及?read.zoo 中的示例。建议您立即查看这些材料。
  • 好的,感谢您的澄清。我发现了一个涉及 Excel 的回旋处(如果有人感兴趣的话):如果你在 Excel 中使用“2/7/13 13:32”类型的时间格式,那么 read.zoo("file.csv ", format="%m/%d/%y %H:%M", sep=",", tz="", header=T) 将数据读入动物园没有问题。我的问题是原始 Excel 格式在时间字段中包含“AM”,动物园无法理解。 sep=",", tz="", header=T)
猜你喜欢
  • 2017-02-28
  • 2014-07-22
  • 1970-01-01
  • 2021-11-02
  • 2014-01-19
  • 2020-12-23
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多