【问题标题】:R: creating xts changes dataset, losing dataR:创建 xts 更改数据集,丢失数据
【发布时间】:2017-05-19 18:18:35
【问题描述】:

当从 data.frame 创建 xtsobject 时,我似乎丢失了一些数据(大约 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")

然后我尝试创建我的xtswith...

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

...我的数据在“最后”部分正确显示,但我现在遇到了不同的问题。前2300条数据做时显示如下结果(使用xtsdata[1500,](或任何

> 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

【问题讨论】:

  • 请将str(mesdonnees) 的输出编辑成您的问题。

标签: r xts posixct


【解决方案1】:

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

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

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

【讨论】:

  • 您好,您的解决方案适用于我数据的“最后”部分(未转换为日期)。但它仍然不适用于数据集的开头(我将编辑帖子并提供更多详细信息)
  • 问题是您的日期时间是两种(或更多?)不同的格式。您应该将 as.POSIXct 调用替换为 anytime::anytimelubridate::ymdhms
  • 是的,我没有注意到初始数据集的日期格式有些混乱;年份写错了(“206”而不是“2006”)。感谢您指出,案件已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
相关资源
最近更新 更多