使用R基于列值过滤大型dataframe:提取E开头编码对应ID
解决方法
你之前单用filter无法得到结果的原因是filter只能按行筛选符合条件的整行数据,无法将分散在多列中的编码合并为单独一列后匹配规则,搭配tidyr的长宽表转换功能即可实现需求,50万行、200余列的体量在常规配置的设备上运行不会有性能问题。
实现代码
# 加载所需包 library(tidyverse) # 处理数据,将代码中的「原数据框」替换为你实际的df名称即可 result <- 原数据框 %>% # 将除IDs外的所有编码列转为长格式,所有编码值统一落到code列 pivot_longer(cols = -IDs, names_to = "code_col_type", values_to = "code") %>% # 筛选所有以E开头的编码,需要忽略大小写的话可以改成str_starts(code, "E", ignore_case = T) filter(str_starts(code, "^E")) %>% # 仅保留需要的两列 select(IDs, code) %>% # 可选:如果需要去除重复的ID+编码组合,保留这行即可 distinct()
效果验证
用你提供的示例数据运行上述代码,输出结果完全匹配你给出的预期结构。
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

