【问题标题】:converting csv to xts in r在r中将csv转换为xts
【发布时间】:2017-10-30 20:11:39
【问题描述】:

我正在尝试将 csv 转换为 xts,但我不知道我得到了什么,哈哈。当我运行第一行时,我得到一个数据框,然后我使用第二行将其转换为 xts。但是当我运行第二行时,日期列中的数据会在同一列中重复!

sti <- read.csv('C:/.../STI.csv', header = TRUE)
sti_xts <- as.xts(sti,order.by = as.Date(sti$DATE))

           DATE         OPEN  HIGH  LOW   CLOSE VOLUME          X12.prd.VMAVE  
2013-01-02 "2013-01-02" "1.0" "1.1" "1.0" "1.0" "16,194,000.00" "11,209,083.00"

2013-01-03 "2013-01-03" "1.1" "1.1" "1.0" "1.0" "12,803,000.00" "10,935,667.00"

2013-01-04 "2013-01-04" "1.0" "1.1" "1.0" "1.0" "15,133,000.00" "10,335,167.00"

2013-01-07 "2013-01-07" "1.0" "1.0" "1.0" "1.0" "13,289,000.00" "11,284,750.00"

2013-01-08 "2013-01-08" "1.0" "1.0" "1.0" "1.0" "57,941,000.00" "15,668,000.00"

2013-01-09 "2013-01-09" "1.0" "1.0" "1.0" "1.0" "81,389,000.00" "21,386,583.00"

我在使用 R 方面还是个新手,在学习了一些教程后我一直在修改它,但我似乎无法弄清楚这一点。

另外,有没有办法让我格式化我的 csv 文件,这样我就不会遇到这样的问题?谢谢!

【问题讨论】:

标签: r csv date xts


【解决方案1】:

首先,删除千位分隔符并转换为数字:

sti$VOLUME <- as.numeric(gsub(",", "", sti$VOLUME))
sti$prd.VMAVE <- as.numeric(gsub(",", "", sti$prd.VMAVE))

然后,在转换为 xts 时,DATE 列不会重复,而是用作您的时间序列索引:

 > index(sti)
 [1] "2013-01-02" "2013-01-03" "2013-01-04" "2013-01-07" "2013-01-08" "2013-01-09"

你想要的可能是排除第一列:

> as.xts(sti[,-1],order.by = as.Date(sti$DATE))
            OPEN HIGH  LOW CLOSE   VOLUME  prd.VMAVE      
2013-01-02  1.0  1.1     1     1 16194000  11209083
2013-01-03  1.1  1.1     1     1 12803000  10935667
2013-01-04  1.0  1.1     1     1 15133000  10335167
2013-01-07  1.0  1.0     1     1 13289000  11284750
2013-01-08  1.0  1.0     1     1 57941000  15668000
2013-01-09  1.0  1.0     1     1 81389000  21386583

【讨论】:

  • 感谢 shosaco,这很有帮助。
  • 如果有帮助,请随时接受它作为答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2013-04-21
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 2020-02-03
相关资源
最近更新 更多