使用filter()函数移除medecin列空值时遇重复列名报错
问题解决:filter()报错"Can't transform a data frame with duplicate names"
核心原因
你的数据集存在重复列名(两个ecart列),还有一列无列名(列名为NA),这是触发报错的直接原因——dplyr的函数(包括filter())无法处理列名重复的数据集,和你筛选medecin空值的逻辑无关。
解决步骤
1. 清理重复/无效列名
推荐用janitor包的clean_names()函数批量处理,它会自动给重复列名添加后缀,给无列名的列生成合理名称:
# 先安装janitor(如果未安装) # install.packages("janitor") library(janitor) library(dplyr) # 清理列名 pg_21_clean <- pg_21 %>% clean_names()
或者手动指定重复列的新名称,更精准:
pg_21_clean <- pg_21 %>% rename( ecart_sejours = ecart, # 第一个ecart对应住院数差值 ecart_ca = ecart.1, # 第二个ecart对应营收差值 unnamed_metric = `NA` # 给无列名的列命名 )
2. 执行筛选逻辑
列名修复后,再运行你的筛选代码即可正常工作:
PG_21 <- pg_21_clean %>% filter(medecin != "")
如果medecin列同时存在空字符串和NA值,建议同时过滤NA:
PG_21 <- pg_21_clean %>% filter(medecin != "" & !is.na(medecin))
内容的提问来源于stack exchange,提问作者gerardlambert
相关产品推荐
相关产品推荐

