如何基于单列内两个值过滤行,用R的dplyr筛选同时有进出口记录的国家
R dplyr 筛选同时有进出口记录的国家所有行的解决方法
核心逻辑是按国家分组后,判断每个分组是否同时存在两类贸易记录,再保留符合条件的分组全部数据即可。
完整代码示例
1. 构造示例测试数据(你可以跳过这步直接用你自己的数据集)
df <- data.frame( Country = c("A", "B", "B", "C", "C", "C", "D"), Year = c(2001, 2001, 2004, 2003, 2005, 2006, 2007), Quantity = c(10,50,20,30,40,60,290), Description = c("Frozen", "Fresh", "Frozen", "Frozen", "Fresh", "Frozen", "Fresh"), `Import/Export` = c("Export", "Import", "Export", "Import", "Export", "Import", "Import"), check.names = FALSE )
2. 核心处理代码
# 加载dplyr包 library(dplyr) result <- df %>% # 按国家字段分组 group_by(Country) %>% # 只保留同时包含Import、Export两类记录的国家的所有行 filter(all(c("Import", "Export") %in% `Import/Export`)) %>% # 解除分组,避免影响后续数据操作 ungroup()
补充说明
如果你的Import/Export列存在首尾空格、大小写不统一、拼写差异等问题,需要先对该列做清洗再执行上述逻辑,例如下方代码先去除列值的首尾空格:
result <- df %>% mutate(`Import/Export` = trimws(`Import/Export`)) %>% group_by(Country) %>% filter(all(c("Import", "Export") %in% `Import/Export`)) %>% ungroup()
运行上述代码后得到的result就是你需要的预期结果。
内容的提问来源于stack exchange,提问作者Gabriel Liu
相关产品推荐
相关产品推荐

