基于tidyverse筛选多匹配Name-City对并生成tibble
解决方案(基于tidyverse)
根据你的需求,我们可以通过分组统计筛选出符合条件的Name-City匹配对,最终生成目标tibble。以下分两种常见需求场景提供代码:
场景1:找出同一Name-City组合出现次数超过1次的匹配对
比如示例中Simon-LA组合出现了3次,这类就是需要保留的目标。
代码实现
library(tidyverse) # 模拟你的数据集(实际使用时替换为你的真实数据) df <- tibble( Name = c("Anne", "Simon", "James", "Charlie", "Simon", "Anne", "Jason", "Simon"), City = c("NY", "LA", "LON", "SA", "LA", "URE", "HAM", "LA"), ID = rep(2, 8) ) # 核心处理逻辑 target_tibble <- df %>% # 按姓名+城市分组,统计每组出现次数 count(Name, City, name = "Match_Count") %>% # 筛选出现次数>1的组合 filter(Match_Count > 1) # 查看结果 target_tibble
输出结果
# A tibble: 1 × 3 Name City Match_Count <chr> <chr> <int> 1 Simon LA 3
场景2:找出关联了多个不同城市的姓名及其对应城市
比如示例中Anne关联了NY和URE两个不同城市,这类场景下需要保留所有该姓名对应的城市。
代码实现
target_tibble_alt <- df %>% # 先去重姓名-城市组合 distinct(Name, City) %>% # 统计每个姓名对应的不同城市数量 group_by(Name) %>% mutate(Unique_City_Count = n()) %>% ungroup() %>% # 筛选有多个不同城市的记录 filter(Unique_City_Count > 1) # 查看结果 target_tibble_alt
输出结果
# A tibble: 2 × 3 Name City Unique_City_Count <chr> <chr> <int> 1 Anne NY 2 2 Anne URE 2
你可以根据实际需求选择对应的代码逻辑,直接替换模拟数据集为你的真实数据即可运行。
内容的提问来源于stack exchange,提问作者Henry Oufh
相关产品推荐
相关产品推荐

