如何避免导入.xlsx的DataFrame新增列名携带原列名后缀?
解决tibble复制列时出现后缀的问题
问题根源在于read_excel返回的是tibble对象,而非基础的data.frame。当用df[,cName]提取列时,tibble会保留列的结构(返回一个单列tibble),赋值给新列时就会显示成Column3$Column2这种嵌套形式;而data.frame默认会把单列转为向量,所以没有后缀问题。
以下是几种解决方法:
方法1:用双层方括号
[[ ]]提取列(推荐,兼容两种数据结构)
双层方括号会直接提取列的向量值,不管是tibble还是data.frame都能正常工作:library(readxl) df <- read_excel("test.xlsx", sheet = "Sheet1") cName <- "Column2" df$Column3 <- df[[cName]] df运行后新增列名会显示为正常的
Column3。方法2:使用
pull()函数(tidyverse工具,适配tibble)dplyr包的pull()函数专门用于从tibble中提取单列作为向量:library(readxl) library(dplyr) df <- read_excel("test.xlsx", sheet = "Sheet1") cName <- "Column2" df$Column3 <- pull(df, cName) df方法3:将tibble转为data.frame
如果习惯用data.frame的操作逻辑,可以直接把导入后的tibble转成data.frame:library(readxl) df <- as.data.frame(read_excel("test.xlsx", sheet = "Sheet1")) cName <- "Column2" df$Column3 <- df[,cName] df方法4:用
dplyr::mutate动态创建列(tidyverse风格)
适合需要批量处理列或更简洁的tidyverse工作流:library(readxl) library(dplyr) df <- read_excel("test.xlsx", sheet = "Sheet1") cName <- "Column2" df <- df %>% mutate(Column3 = !!sym(cName)) df
内容的提问来源于stack exchange,提问作者Roger1219
相关产品推荐
相关产品推荐

