名为d的数据框包含以下数据:
timestamp,value
"2013-06-02 00:00:00",70
"2013-06-02 00:02:00",70
"2013-06-02 00:07:00",60
"2013-06-02 00:15:00",70
"2013-06-02 00:12:00",60
"2013-06-02 00:30:00",70
"2013-06-02 00:45:00",70
"2013-06-02 01:00:00",70
Run Code Online (Sandbox Code Playgroud)
我的代码是:
d = read.csv(path, header=TRUE, sep=",")
d2 <- xts(x = d[c("value")], order.by = as.POSIXct(d[, "timestamp"], tz = "GMT", format = "%Y-%m-%d %H:%M:%S"))
ends <- endpoints(d2, on = "minutes", k = 15)
d3 <- period.apply(d2, ends, mean)
Run Code Online (Sandbox Code Playgroud)
之后,我想将xts对象转换为数据帧,我使用这个:
d3$timestamp = rownames(d3)
rownames(d3) = NULL
d3$timestamp = strptime(d3$timestamp, "%Y-%m-%d %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)
但是在最后一步中它会向此输出错误:
Error in NextMethod(.Generic) :
number of items to replace is not a multiple of replacement length
Run Code Online (Sandbox Code Playgroud)
正如我观察到在整个命令之后键入d3,对象具有以下数据格式:
timestamp
2013-06-02 00:15:00 65
2013-06-02 00:30:00 70
2013-06-02 00:45:00 70
2013-06-02 01:00:00 70
Run Code Online (Sandbox Code Playgroud)
但是,在列名中,它必须具有名称值,并且第二列具有此处的时间戳.可能有什么不对?
正确的输出必须是这样的:
value
65 2013-06-02 00:15:00
70 2013-06-02 00:30:00
70 2013-06-02 00:45:00
70 2013-06-02 01:00:00
Run Code Online (Sandbox Code Playgroud)
ags*_*udy 10
您可以像这样创建data.frame:
data.frame(value=coredata(d3),timestamp=index(d3))
# value timestamp
# 1 65 2013-06-02 00:12:00
# 2 70 2013-06-02 00:15:00
# 3 70 2013-06-02 00:30:00
# 4 70 2013-06-02 00:45:00
# 5 70 2013-06-02 01:00:00
Run Code Online (Sandbox Code Playgroud)
我还建议您使用read.zoo将数据作为动物园对象读取,并避免手动强制xts.例如:
dat <- read.zoo(text='timestamp,value
"2013-06-02 00:00:00",70
"2013-06-02 00:02:00",70
"2013-06-02 00:07:00",60
"2013-06-02 00:15:00",70
"2013-06-02 00:12:00",60
"2013-06-02 00:30:00",70
"2013-06-02 00:45:00",70
"2013-06-02 01:00:00",70',tz ='' , format = "%Y-%m-%d %H:%M:%S",header=TRUE,
sep=',')
d2 <- as.xts(dat)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3867 次 |
| 最近记录: |