R语言中使用read.zoo读取文件丢失列名,如何解决?
修复read.zoo读取CSV丢失列名的问题
问题场景
现有ts.csv文件内容:
Date,Foo 2000-01-01,1.45 2000-02-01,1.59
执行以下R代码:
library(zoo) infile = "ts.csv" df = read.zoo(infile, header=TRUE, index=1, read=read.csv) print(df) cat("\ncolnames =",colnames(df),"\ndone\n")
运行后列名丢失,输出结果:
Attaching package: 'zoo' The following objects are masked from 'package:base': as.Date, as.Date.numeric 2000-01-01 2000-02-01 1.45 1.59 colnames = done
解决方案
方法1:添加drop=FALSE参数
当CSV除索引列外仅含一列数据时,read.zoo默认返回单变量zoo对象(无列名),添加drop=FALSE可强制保留数据框结构及列名:
library(zoo) infile = "ts.csv" df = read.zoo(infile, header=TRUE, index=1, drop=FALSE) print(df) cat("\ncolnames =",colnames(df),"\ndone\n")
方法2:先读为data.frame再转zoo
手动读取CSV为data.frame,再构造zoo对象并指定列名:
library(zoo) infile = "ts.csv" csv_df <- read.csv(infile) df <- zoo(csv_df$Foo, order.by = as.Date(csv_df$Date)) colnames(df) <- "Foo" print(df) cat("\ncolnames =",colnames(df),"\ndone\n")
方法3:显式指定col.names参数
直接通过col.names参数指定列名:
library(zoo) infile = "ts.csv" df = read.zoo(infile, header=TRUE, index=1, col.names = "Foo") print(df) cat("\ncolnames =",colnames(df),"\ndone\n")
修复后输出
执行任意一种修复代码,都会得到带列名的输出:
Foo 2000-01-01 1.45 2000-02-01 1.59 colnames = Foo done
内容的提问来源于stack exchange,提问作者Fortranner
相关产品推荐
相关产品推荐

