将data.frame转为xts对象时列名丢失的技术求助
解决xts转换时列名丢失的问题
这个问题的核心原因是:当你从data.frame中提取单列时,R会默认把它简化为一个向量(而非保留单列数据框的结构),而as.xts处理向量时不会自动继承原列名。
这里有两个简单的解决办法:
方法1:提取列时保留数据框结构
使用drop=FALSE参数,强制R返回一个单列的data.frame而非向量,这样as.xts就能自动识别并保留列名:
res0 = structure(list(year = "2017", il = 11200000), .Names = c("year", "il"), row.names = c(NA, -1L), class = "data.frame") # 添加drop=FALSE参数 as.xts(x = res0[,2:ncol(res0), drop=FALSE], order.by = as.POSIXct(paste0(res0$year,"-01-01")))
执行后会得到带列名il的xts对象:
il 2017-01-01 11200000
方法2:手动指定name参数
如果你不想修改提取列的方式,也可以直接在as.xts中通过name参数显式指定列名:
as.xts(x = res0[,2:ncol(res0)], order.by = as.POSIXct(paste0(res0$year,"-01-01")), name = colnames(res0)[2:ncol(res0)])
这个方法同样能让输出的xts对象保留原列名il。
小补充:如果你的res0有多列数据,第一种方法会更通用——它能自动保留所有列的名称,不需要手动逐个指定。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

