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