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

如何修改dplyr的summarise_all(n_distinct)统计排除"bla"的不同类别数

用dplyr统计排除特定类别("bla")的唯一值数量

嘿,我来帮你搞定这个问题!首先明确你的需求:要对数据框的每一列,统计**不等于"bla"**的不同类别数量——原代码d1 %>% summarise_all(n_distinct)会把"bla"也算进去,所以得调整一下逻辑。

先回顾下你的示例数据:

> d1 # A tibble: 5 x 2
  x      y    
  <chr>  <chr>
1 yellow A    
2 green  A    
3 green  bla  
4 blue   B    
5 bla    bla  

两种可行的修改方案

方案1:用summarise_all结合匿名函数(兼容旧版dplyr)

直接在summarise_all里对每列先筛选掉"bla",再统计唯一值数量:

d1 %>% 
  summarise_all(~n_distinct(.[. != "bla"]))

这里的~是定义匿名函数的简写,.代表当前处理的列,.[. != "bla"]就是取出当前列中所有不等于"bla"的值,接着用n_distinct统计这些值的唯一数量。运行后就能得到x列3、y列2的结果。

方案2:用across(dplyr 1.0.0+推荐写法)

如果你用的是dplyr 1.0.0及以上版本,官方更推荐用across替代summarise_all(后者已经被软弃用),代码可读性更强:

d1 %>% 
  summarise(across(everything(), ~n_distinct(.[. != "bla"])))

across(everything())表示对数据框的所有列应用后面的函数,逻辑和方案1完全一致,结果也相同。

最终输出结果

运行上述任意一段代码,都会得到符合预期的结果:

# A tibble: 1 x 2
      x     y
  <int> <int>
1     3     2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:57