我有一个csv文件并使用
提取数据banknifty <- as.xts(read.zoo("banknifty.csv",sep=",",tz="" ,header=T))
read.zoo()
使用数值提取数据框,但在我应用as.xts()
时,data. frame
的数值会转换为字符。
# banknifty[1,] gives
2008-01-01 09.34:00 "10" "12" "13"
我希望as.xts
应该使用数值返回data.frame
。
如何避免这个问题?
答案 0 :(得分:6)
你对xts / zoo对象的本质感到困惑。它们是具有有序索引属性的矩阵,因此您不能像在data.frame中那样在xts / zoo对象中混合类型。
将对象转换为字符的原因是因为文件中的某些值不是数字。这也是您在尝试hd1's解决方案时遇到NAs introduced by coercion
错误的原因。
因此,您的问题的答案是“修复您的CSV文件”,但除非您向我们展示文件的内容,否则我们无法帮助您解决问题。
答案 1 :(得分:1)
使用as.numeric,您的代码将是:
> data.in <- as.xts(read.zoo("banknifty.csv",sep=",",tz="" ,header=T);
> sapply(c(1:4), function(n) { data.in[,n] <- as.numeric(data.in[,n]) }, simplify=TRUE )
[,1] [,2] [,3] [,4]
[1,] 6032.25 6040.50 6032.17 6036.29
[2,] 6036.29 6036.29 6020.00 6025.05
[3,] 6025.05 6026.00 6020.10 6023.12
[4,] 6023.12 6034.45 6022.73 6034.45
[5,] 6034.45 6034.45 6030.00 6030.00
[6,] 6030.00 6038.00 6028.25 6038.00
> data.in
V2 V3 V4 V5
2007-01-02 10:00:00 6032.25 6040.50 6032.17 6036.29
2007-01-02 10:05:00 6036.29 6036.29 6020.00 6025.05
2007-01-02 10:10:00 6025.05 6026.00 6020.10 6023.12
2007-01-02 10:15:00 6023.12 6034.45 6022.73 6034.45
2007-01-02 10:20:00 6034.45 6034.45 6030.00 6030.00
2007-01-02 10:25:00 6030.00 6038.00 6028.25 6038.00
>
答案 2 :(得分:0)
> sapply(c(1:4), function(n) { data.in[,n] <- as.numeric(data.in[,n]) }, simplify=TRUE )
此命令不会对data.in进行任何更改。它以相同的格式返回数据,带引号
> data.in
V2 V3 V4 V5
2007-01-02 10:00:00 "6032.25" "6040.50" "6032.17" "6036.29"
2007-01-02 10:05:00 "6036.29" "6036.29" "6020.00" "6025.05"
2007-01-02 10:10:00 "6025.05" "6026.00" "6020.10" "6023.12"
答案 3 :(得分:0)
我遇到了类似的问题。在我的例子中,问题是as.xts()函数尝试将日期列与数字列一起转换。由于R不将日期视为数值,因此它会自动将整个数据框转换为字符。我假设你的例子中也会发生这种情况(你可以使用你的.csv文件来检查)。
这样的事情应该会有所帮助:
data.in <- read.csv("banknifty.csv",sep=",",header=T)
data.in[,1] <- format(as.Date(data.in[,1]), format="%Y-%m-%d", tz="GMT", usetz=TRUE) #change tz to whatever applies
data.in[,1] <- as.POSIXct(data.in[,1], "GMT")
data.ts <- xts(data.in[,c(2,3,4,5)], order.by = data.in[,1])
(请注意,data.ts&lt; - xts(data.in,order.by = data.in [,1])会复制不需要的转换。此外,道歉这可能不是最干净/最简洁的代码,我还在学习。)