R语言中定位separate_rows报错行并移至新数据框DF的方法
处理separate_rows拆分列时的行不匹配问题
核心思路:先筛选异常行,再处理正常行
不用逐行tryCatch(大数据量下会导致程序假死),直接通过统计分隔符数量快速定位异常行:
- 统计每行的分隔符数量
用stringr::str_count计算Col1和Col2中;的个数,判断是否相等:
library(stringr) library(tidyr) library(data.table) # 若用data.table格式,用dplyr也可 # 给原数据框添加计数列 DT[, col1_count := str_count(Col1, ";")] DT[, col2_count := str_count(Col2, ";")] # 拆分异常行和正常行 DF <- DT[col1_count != col2_count, ] DT_clean <- DT[col1_count == col2_count, ] # 清理临时计数列 DT_clean[, c("col1_count", "col2_count") := NULL] DF[, c("col1_count", "col2_count") := NULL]
- 对正常行执行拆分
DT_split <- separate_rows(DT_clean, Col1, Col2, sep = "; ")
为什么tryCatch会导致冻结?
逐行使用tryCatch相当于循环处理每一行,当数据量较大时,这种方式时间复杂度极高,会让程序陷入长时间运算,看起来像是“冻结”。直接通过向量式的统计判断,是R中更高效的处理方式。
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

