如何将以下原始数据转换为zoo或xts时间戳?

时间:2016-01-04 19:11:19

标签: r xts zoo

我在CSV文件中的原始数据如下所示,即日期时间格式为%Y%m%d,字母&#34; T&#34;,后跟%H%M%S:< / p>

20151230T090029, 33.04
20151230T090029, 33.06
20151230T090029, 33.07
20151230T090029, 33.05
20151230T090029, 33.04
20151230T090029, 33.05
20151230T090029, 33.04

如何在动物园或xts中将第一列作为时间索引?

2 个答案:

答案 0 :(得分:2)

鉴于您的数据为d

> d
               V1    V2
1 20151230T090029 33.04
2 20151230T090029 33.06
3 20151230T090029 33.07
4 20151230T090029 33.05
5 20151230T090029 33.04
6 20151230T090029 33.05
7 20151230T090029 33.04

然后可以使用comments中给出的格式字符串转换为POSIX时间类:

> as.POSIXct(d$V1,format="%Y%m%dT%H%M%S")
[1] "2015-12-30 09:00:29 GMT" "2015-12-30 09:00:29 GMT"
[3] "2015-12-30 09:00:29 GMT" "2015-12-30 09:00:29 GMT"
[5] "2015-12-30 09:00:29 GMT" "2015-12-30 09:00:29 GMT"
[7] "2015-12-30 09:00:29 GMT"

构造了一个zoo对象:

> zoo(d$V2, as.POSIXct(d$V1,format="%Y%m%dT%H%M%S"))
2015-12-30 09:00:29 2015-12-30 09:00:29 2015-12-30 09:00:29 2015-12-30 09:00:29 
              33.04               33.06               33.07               33.05 
2015-12-30 09:00:29 2015-12-30 09:00:29 2015-12-30 09:00:29 
              33.04               33.05               33.04 
Warning message:
In zoo(d$V2, as.POSIXct(d$V1, format = "%Y%m%dT%H%M%S")) :
  some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique

带有该警告,因为所有时间点都相同。

答案 1 :(得分:2)

作为Josh O'Brien suggested,您可以使用Animal_id : attribute ------ : --------- 1 : insect 1 : flying 2 : flying ... and Animal_id : common_name : latin_name ... 1 Beetle ... 2 Sparrow ... 3...

执行此操作
read.zoo

然后,您可以通过转换为xts并使用library(zoo) Lines <- "20151230T090029, 33.04 20151230T090029, 33.06 20151230T090029, 33.07 20151230T090029, 33.05 20151230T090029, 33.04 20151230T090029, 33.05 20151230T090029, 33.04" z <- read.zoo(text=Lines, sep=",", FUN=as.POSIXct, format="%Y%m%dT%H%M%S") 处理相同的时间戳问题Gabor mentioned

xts::make.index.unique

请参阅How R formats POSIXct with fractional seconds,了解为什么小数秒打印方式会使它们看起来不正确。