重探R语言中‘无法重命名不存在的列’错误问题
R语言列重命名报错的解决方案
问题原因分析
你遇到的两个问题分别源于:
rename()方法:错误使用了点分隔的列名(Total.Agree...August.2020),但read_csv()默认保留原始列名(带空格和破折号的Total Agree - August 2020),导致R找不到对应列。rename_with()+recode()方法:键值对逻辑完全写反,recode()的规则是旧列名 = 新列名,你却把新列名作为键、旧列名作为值,同时存在多余的反引号语法错误。
正确实现代码
方法1:使用rename()
因为列名包含空格和特殊字符,必须用反引号`包裹旧列名:
library(pacman) p_load(dplyr, readr) data <- read_csv("https://raw.githubusercontent.com/srk7774/data/master/august_october_2020.csv") data %>% rename( country = X.1, august = `Total Agree - August 2020`, october = `Total Agree - October 2020` )
方法2:使用rename_with()+recode()
修正键值对顺序,确保旧列名对应新列名:
column_recodes <- c( X.1 = "country", `Total Agree - August 2020` = "august", `Total Agree - October 2020` = "october" ) data %>% rename_with(~recode(., !!!column_recodes))
或者用字符串形式指定旧列名:
column_recodes <- c( "X.1" = "country", "Total Agree - August 2020" = "august", "Total Agree - October 2020" = "october" ) data %>% rename_with(~recode(., !!!column_recodes))
额外说明
read_csv()默认不会修改列名(与read.table()的check.names=TRUE行为不同),如果需要自动将列名转换为合法R变量名,可以添加参数check.names=TRUE。- 使用
rename_with()时,若只需要重命名部分列,可以添加.cols参数指定目标列,避免处理无关列。
内容的提问来源于stack exchange,提问作者Ramakrishna S
相关产品推荐
相关产品推荐

