tibble列名为数字时使用select()函数选取列报错的解决咨询
报错原因
报错的核心原因不是列名本身为数字格式,而是你传入all_of()的append(list1, list2)结果为数值型向量:当你给select()的选择器传数值时,dplyr会默认按照「列的位置索引」选取列,你给出的数值(如61927)远超过数据集总列数5312,因此触发列不存在的报错。
解决方法
核心是把待选的列名统一转为字符串类型,让all_of()匹配列名而非匹配列位置,不需要修改原数据集的列名,修改后代码如下:
# 先把合并后的列名列表转为字符串向量 select_cols <- as.character(append(list1, list2)) df2 <- df1 %>% select(`Year`, all_of(select_cols))
可选优化
- 可提前运行
intersect(select_cols, colnames(df1))校验待选列名是否都存在于数据集中,提前排查不匹配的列名 - 如果允许忽略不存在的待选列,可将
all_of()替换为any_of(),自动跳过不存在的列避免报错:
select_cols <- as.character(append(list1, list2)) df2 <- df1 %>% select(`Year`, any_of(select_cols))
内容的提问来源于stack exchange,提问作者randomwalker
相关产品推荐
相关产品推荐

