从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.frame
和xts
中查看同一行时,我可以看到这些行是偏移的(我在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
答案 0 :(得分:0)
问题是您只在datetext
和formatdate
中包含时间戳的日期部分,但您的数据包含日期和时间。
您也不需要执行所有字符串子集化。您可以通过在format
来电中指定as.POSIXct
参数来获得相同的结果。
xtsdata <- xts(mesdonnees$value,
as.POSIXct(mesdonnees$times, "GMT", format = "%d-%m-%Y %H:%M")