R导入小时级CSV数据转xts对象的报错及类型转换问题求解
R语言CSV小时级数据转xts对象问题解决方案
问题1:'order.by' cannot contain 'NA', 'NaN', or 'Inf'报错解决
原因
使用完整CSV运行时,as.POSIXct转换日期列的过程中生成了NA值,根本原因是完整CSV中存在不符合%d-%m-%Y %H:%M格式的日期时间行。
排查与解决代码
# 先统计转换失败的日期数量 sum(is.na(pt)) # 定位转换失败的原始日期内容,针对性修正格式 btch$date[is.na(pt)] # 也可以直接过滤掉异常行 btch_clean <- btch[!is.na(pt), ] pt_clean <- pt[!is.na(pt)]
问题2:xts对象所有值转为字符型问题解决
原因
- xts底层基于矩阵实现,要求所有列的数据类型统一,只要存在任意一列是字符型(比如示例中的
symbol列本身为字符格式),整个xts对象会被强制转换为字符类型 - 交易量列(Volume.BTC、Volume.USD)带有
.作为千位分隔符,R读取时会默认识别为字符而非数值
解决代码
# 1. 处理交易量列的千位分隔符,转换为数值型 btch_clean$Volume.BTC <- as.numeric(gsub("\\.", "", btch_clean$Volume.BTC)) btch_clean$Volume.USD <- as.numeric(gsub("\\.", "", btch_clean$Volume.USD)) # 2. 仅将数值列转换为xts对象,字符列如symbol可单独存储或作为xts属性添加 btch_ts <- xts(btch_clean[, c("open", "high", "low", "close", "Volume.BTC", "Volume.USD")], order.by = pt_clean)
结果验证
# 查看列类型,确认已转为数值 class(btch_ts$open)
内容的提问来源于stack exchange,提问作者Kurtosis78
相关产品推荐
相关产品推荐

