如何不使用库提取列标题?R代码输出数字问题及修正
问题:提取数据框列标题却输出数字的原因与解决方法
我编写了如下R代码,期望提取数据框的列标题,但运行后却输出数字:
train <- read.csv("Regression_train.csv" ) colnames<-colnames(train) df<-as.data.frame(colnames) n <-length(df$colnames) cat('ncols',n,'\n') for ( i in 1:n) { colname <-df$colnames[i] cat(colname,'\n') }
数字来源解析
问题出在as.data.frame(colnames)这一步:
colnames(train)返回的是字符向量,存储的是列标题文本。- 当用
as.data.frame()将其转换为数据框时,旧版R默认会把字符向量转为因子(factor)类型。因子的底层存储是整数编码,你提取并打印的就是这些底层数字,而非原本的字符标题。
正确获取列标题的方法
方法一:直接操作原始列名向量(最简洁)
不需要将列名转成数据框,直接对colnames(train)返回的向量进行操作,就像测试后可行的代码:
train <- read.csv("Regression_train.csv") colnames_vec <- colnames(train) n <- length(colnames_vec) cat('ncols', n, '\n') for (i in 1:n) { colname <- colnames_vec[i] cat(colname, '\n') }
方法二:转数据框时保留字符类型(若必须用数据框)
如果一定要把列名存到数据框里,需要显式指定stringsAsFactors = FALSE,确保字符向量不被转为因子:
train <- read.csv("Regression_train.csv") colnames_vec <- colnames(train) df <- as.data.frame(colnames_vec, stringsAsFactors = FALSE) n <- length(df$colnames_vec) cat('ncols', n, '\n') for (i in 1:n) { colname <- df$colnames_vec[i] cat(colname, '\n') }
内容的提问来源于stack exchange,提问作者Kirsten
相关产品推荐
相关产品推荐

