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

在R中筛选各视频集前20个视频的所有鱼类计数观测数据

使用dplyr筛选每个视频集的前N个唯一视频的所有观测数据

需求说明

  • 按Video_Set分组,保留每个组内**前N个唯一视频(Video_Unique)**的所有观测行(每个视频可能对应多行数据)
  • 若组内唯一视频数量少于N,直接保留该组全部数据

解决方案代码

library(dplyr)

# 模拟数据集
data <- data.frame(Site= c('A', 'A', 'A', 'A', 'A', 'A','B', 'C', 'C', 'C', 'C', 'C'),
                   Video_Set=c(1,1,1,1,1,1,2,3,3,3,3, 3),
                   Video_Unique=c(1,2,3,3,3,3,4,5,6,6,7,8),
                   Fish_Present=c('Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes','No', 'Yes', 'Yes', 'Yes', 'Yes','No'))

# 设置要保留的前N个唯一视频(实际使用时替换为20)
n <- 2

# 核心筛选逻辑
result <- data %>%
  group_by(Video_Set) %>%
  # 筛选当前组内属于前n个唯一视频的所有行
  filter(Video_Unique %in% unique(Video_Unique)[1:min(n, n_distinct(Video_Unique))]) %>%
  ungroup()

# 输出结果
print(result)

代码解释

  1. 分组处理:group_by(Video_Set)确保每个视频集单独处理
  2. 提取前N个唯一视频:
    • unique(Video_Unique)获取当前组内所有唯一的视频ID,顺序为数据中首次出现的顺序
    • min(n, n_distinct(Video_Unique))自动适配视频数量不足N的情况(比如示例中Video_Set2仅1个视频,直接取全部)
  3. 筛选目标行:Video_Unique %in% ...保留目标视频的所有关联行,不管每个视频对应多少行数据

结果验证

运行代码后得到的结果与预期的goal完全一致:

# A tibble: 5 × 4
  Site  Video_Set Video_Unique Fish_Present
  <chr>     <dbl>        <dbl> <chr>       
1 A             1            1 Yes         
2 A             1            2 Yes         
3 B             2            4 No          
4 C             3            5 Yes         
5 C             3            6 Yes         

原尝试代码的问题

你之前的代码仅筛选出了组内唯一视频数量大于2的组,但没有进一步筛选组内的前N个视频,因此无法满足保留指定视频所有行的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:35:20