R语言如何查找字符列中含数值错误的对应观测行号
解决方案
首先纠正一个认知偏差:你用ned1 %>% count(source_id)输出结果里看到的X不是数据集自带的列,是tibble打印时自动显示的结果表自身的行序号,既不能直接调取,也和原始ned1数据集的行号没有对应关系,不能靠它定位原始数据的错误行。
直接用下面的代码就能一步定位所有source_id列里混入的数值类错误值对应的原始行:
library(dplyr) # 定位所有错误行,返回原始行号和对应错误值 error_records <- ned1 %>% # 生成和原始数据完全对应的真实行号 mutate(raw_row_id = row_number()) %>% # 筛选规则:能被转成数值的就是混入的错误值,转失败的正常字符会返回NA filter(!is.na(suppressWarnings(as.numeric(source_id)))) %>% select(raw_row_id, source_id)
运行后error_records里的raw_row_id就是错误值在原始ned1里的准确行号,直接对应找到单元格修改即可。
如果你已经从count()的统计结果里记下了具体的异常数值,也可以直接匹配取值定位:
# 替换成你在count结果里看到的具体异常值 abnormal_values <- c("你看到的错误数值1", "你看到的错误数值2") error_records2 <- ned1 %>% mutate(raw_row_id = row_number()) %>% filter(source_id %in% abnormal_values) %>% select(raw_row_id, source_id)
如果需要直接删除这些错误行,不用手动找行号,直接运行下面的代码就能得到清洗后的数据集:
ned1_clean <- ned1 %>% filter(is.na(suppressWarnings(as.numeric(source_id))))
补充说明:如果你的
source_id列本身就允许存在纯数字的合法ID,就不要用自动转数值的筛选逻辑,换成用abnormal_values匹配的方式更稳妥,避免误删正常数据。
内容的提问来源于stack exchange,提问作者daydreamer94
相关产品推荐
相关产品推荐

