在R中将Parquet文件最后一列设为DataFrame索引时出错
解决Parquet文件转DataFrame时设置行名的错误
错误原因
read_parquet默认返回tibble类型数据,而tibble已弃用设置行名的操作,因此会出现警告。- 原代码中
df[,ncol(df)]提取的是单列tibble,而非向量。rownames<-要求赋值的是长度等于数据行数的向量,单列tibble的长度为1(列数),与行数不匹配,触发invalid 'row.names' length错误。
修正方案
方案1:转为普通DataFrame处理
# 读取文件并转换为普通dataframe df <- as.data.frame(read_parquet("file.parquet.gz")) # 提取最后一列的向量值作为行名 rownames(df) <- df[[ncol(df)]] # 删除最后一列 df <- df[, -ncol(df)]
这里用df[[ncol(df)]]直接提取列的向量值,而非tibble列。
方案2:用dplyr工具处理(推荐)
借助dplyr的column_to_rownames函数,一步完成行名设置和列删除,同时适配tibble:
library(dplyr) df <- read_parquet("file.parquet.gz") %>% column_to_rownames(var = names(.)[ncol(.)])
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

