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

在R语言中基于group_by按条件统计唯一玩家数量

按队伍统计分数≥1的唯一玩家数解决方案

给定数据集:

dat <- data.frame(team = c("new", "new", "old"),
           player = c("bob", "bill", "sue"),
           score = c(1, 0, 3))

要求在group_by框架内完成统计,不能提前筛选数据集。

正确代码实现

直接在n_distinct里通过索引筛选符合分数条件的玩家即可,逻辑清晰且避免类型问题:

library(dplyr)

dat %>% 
  group_by(team) %>% 
  summarise(total_players = n_distinct(player[score >= 1]))

运行后得到结果:

# A tibble: 2 × 2
  team  total_players
  <chr>         <int>
1 new               1
2 old               1

原代码的问题

你之前用ifelse的写法,当player是因子类型(data.frame默认把字符串转成因子)时,ifelse会自动把因子转成字符向量,虽然这个小例子里可能看不出问题,但在复杂数据中容易触发类型不一致的bug。而player[score >= 1]是直接提取符合条件的玩家值,自动跳过不符合的行,写法更稳妥。

另外还有一种等价写法,用cur_data()获取当前分组数据后筛选:

dat %>% 
  group_by(team) %>% 
  summarise(total_players = n_distinct(filter(cur_data(), score >= 1)$player))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:07:54