You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用dplyr识别多列缺失的唯一值并定位问题行

解决方法(基于dplyr)

假设你的数据集名为df,按以下步骤操作:

1. 验证各列唯一值数量(可选)

先确认你统计的唯一值数量是否准确:

df %>% 
  summarize(
    唯一common_name数 = n_distinct(common_name),
    唯一speciesID数 = n_distinct(speciesID),
    唯一species数 = n_distinct(species)
  )

2. 找出speciesID缺失的2个common_name值

核心是对比所有common_name唯一值和有对应非空speciesID的common_name唯一值,找出前者有但后者没有的项:

# 提取所有唯一的common_name
all_common <- df %>% distinct(common_name)
# 提取有非空speciesID对应的唯一common_name
id_connected_common <- df %>% filter(!is.na(speciesID)) %>% distinct(common_name)
# 找出speciesID缺失的common_name(共2个)
missing_id_names <- anti_join(all_common, id_connected_common, by = "common_name")

3. 找出species缺失的3个common_name值

用同样逻辑对比common_name和species的对应关系:

# 提取有非空species对应的唯一common_name
species_connected_common <- df %>% filter(!is.na(species)) %>% distinct(common_name)
# 找出species缺失的common_name(共3个)
missing_species_names <- anti_join(all_common, species_connected_common, by = "common_name")

4. 定位对应的问题行

直接筛选出属于上述缺失名称的行,就能看到具体是哪些记录出了问题:

# 定位speciesID缺失的问题行
problem_rows_id <- df %>% filter(common_name %in% missing_id_names$common_name)
# 定位species缺失的问题行
problem_rows_species <- df %>% filter(common_name %in% missing_species_names$common_name)

关于之前anti_join失败的原因

大概率是没提前过滤NA值,或者直接用全量数据集而非唯一值集合做join——全量数据里的重复值会干扰对比结果,先提取唯一值再做anti_join才能精准定位缺失项。

内容的提问来源于stack exchange,提问作者Blundering Ecologist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:10:05