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

如何在不同森林类型下识别组b相较于组a的差异树种?

我来帮你搞定这个需求!你要的是按每个森林类型(type),筛选出组b里那些组a完全没有的树种,这里有两种用dplyr实现的简洁方案,都能得到你预期的结果:

方法一:分组后直接筛选

利用dplyr的分组功能,在每个type组内直接判断b组的树种是否不在a组的树种集合里:

library(dplyr)

dd %>%
  group_by(type) %>%
  # 筛选grp为b,且树种不在当前type下a组的树种列表中
  filter(grp == "b" & !sp %in% sp[grp == "a"]) %>%
  # 去重避免重复记录
  distinct(type, grp, sp)

运行后得到的结果正好是你想要的:

# A tibble: 3 × 3
# Groups:   type [2]
   type grp   sp    
  <dbl> <chr> <chr> 
1     1 b     yew   
2     2 b     beech 
3     2 b     spruce

方法二:用anti_join做差集

先提取每个type下a组的唯一树种,再通过anti_join找出b组中不在这个集合里的记录,逻辑更直观:

# 先整理出每个type下a组的所有唯一树种
a_sp_list <- dd %>%
  filter(grp == "a") %>%
  distinct(type, sp)

# 筛选b组的唯一树种,再剔除掉a组已有的部分
dd %>%
  filter(grp == "b") %>%
  distinct(type, grp, sp) %>%
  anti_join(a_sp_list, by = c("type", "sp"))

这个方法的输出和上面完全一致,anti_join本身就是专门用来找两个数据集的差异部分的,非常适合这类需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:58:14