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

R: creating xts changes dataset, losing data

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

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

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

... "last" 部分的数据显示正确,但我现在遇到了不同的问题。前2300条数据在做时显示如下结果(使用xtsdata[1500,](或任何行<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

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

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

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