R:创建xts更改数据集,丢失数据

时间:2017-05-19 18:18:35

标签: r xts posixct

xts创建data.frame对象时,我似乎丢失了一些数据(大约3000个数据丢失超过33 000)。

我的数据集如下:(时间为日 - 月 - 年,欧盟格式)

> head(mesdonnees)
              time value
1 05-03-2006 04:07    NA
2 05-03-2006 04:17    NA
3 05-03-2006 04:27    NA
4 05-03-2006 04:37    NA
5 05-03-2006 04:47    NA
6 05-03-2006 04:57    NA

由于格式我必须提取日期的不同部分(至少我无法使as.POSIXct使用此格式)。 我是这样做的:

# Extract characters and define as S....
Syear <- substr(mesdonnees$time, 7,10)
Smonth <- substr(mesdonnees$time, 4,5)
Sday <- substr(mesdonnees$time, 1, 2)

#Gather all parts and use "-" as sep
datetext <- paste(Syear, Smonth, Sday, sep="-")
#define format of each part of the string
formatdate<-as.POSIXct(datetext, format="%Y-%m-%d", tz = "GMT")

然后我尝试用...创建xts

xtsdata <- xts(mesdonnees$value, order.by = formatdate, tz = "GMT")

...但是当我这样做时,我得到一些非常奇怪的结果:第一个值是在1900年

> head(xtsdata)
           [,1]
1900-01-04   NA
2006-03-05   NA
2006-03-05   NA
2006-03-05   NA
2006-03-05   NA
2006-03-05   NA

并且没有保留许多(3000)日期:

> xtsdata[30225:30233,]
           [,1]
2006-12-31    0
2006-12-31    0
2006-12-31    0
2006-12-31    0
<NA>         NA
<NA>         NA
<NA>         NA
<NA>         NA
<NA>         NA

当我在data.framexts中查看同一行时,我可以看到这些行是偏移的(我在xts对象中更改了日期格式创建):

> mesdonnees[25617,]
                  time value
25617 08-11-2006 23:51     0
> xtsdata[25617,]
           [,1]
2006-11-25 0.27

我的数据是如何抵消的?我尝试更改tz,但它并没有影响它。我使用dyplr package删除了所有重复项,但它也不会影响xts结果。谢谢你的帮助!

将我的xts代码更改为Joshua建议的代码:

xtsdata <- xts(mesdonnees$value, order.by = as.POSIXct(mesdonnees$time, tz = "GMT", format = "%d-%m-%Y %H:%M"))

...我的数据显示适用于&#34; last&#34;部分,但我现在有一个不同的问题。第一个2300数据在执行时显示以下结果(使用xtsdata[1500,](或任何行&lt; 2300)显示相同的结果)

> view(xtsdata):
0206-06-30 23:08:00    NA
0206-06-30 23:18:00    NA
0206-06-30 23:28:00    NA
1900-01-04 12:00:00    NA
2006-03-05 04:07:00    NA
2006-03-05 04:17:00    NA

我之前注意到这个错误,并认为这是由于日期格式;也许不是吗?另外,在查看xtsdata时,我没有得到同一行的相同结果(最后一行是正确的想法):

> mesdonnees[2360,]
                 time value
2360 23-03-2006 03:09    NA
> xtsdata[2360,]
                    [,1]
2006-03-05 09:07:00   NA

根据要求:

> str(mesdonnees)
'data.frame':   32556 obs. of  2 variables:
 $ time : chr  "05-03-2006 04:07" "05-03-2006 04:17" "05-03-2006 04:27" "05-03-2006 04:37" ...
 $ value: num  NA NA NA NA NA NA NA NA NA NA ...

如果需要:

An ‘xts’ object on 0206-06-01 00:09:00/2006-12-31 23:29:00 containing:
  Data: num [1:32556, 1] NA NA NA NA NA NA NA NA NA NA ...
  Indexed by objects of class: [POSIXct,POSIXt] TZ: GMT
  xts Attributes:  
 NULL

1 个答案:

答案 0 :(得分:0)

问题是您只在datetextformatdate中包含时间戳的日期部分,但您的数据包含日期和时间。

您也不需要执行所有字符串子集化。您可以通过在format来电中指定as.POSIXct参数来获得相同的结果。

xtsdata <- xts(mesdonnees$value,
               as.POSIXct(mesdonnees$times, "GMT", format = "%d-%m-%Y %H:%M")