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

在R中筛选两类数据行:跨年度存在的动物及周观测数超2的动物

这里给你针对两个筛选需求的R语言实现方案,用tidyverse的dplyr包来处理会很直观,先把原始数据集构造出来:

# 构造原始数据集
df <- data.frame(
  Animal = c("A", "B", "B", "A", "B", "A", "B", "C", "B", "A"),
  Year = c(2018, 2017, 2019, 2018, 2019, 2019, 2017, 2019, 2018, 2019),
  Week = c(15, 15, 16, 17, 15, 16, 15, 17, 18, 15),
  Value = c(14, 6, 9, 17, 25, 27, 20, 6, 3, 5)
)
需求1:保留同时出现在2018和2019年的动物行

思路

先确定哪些动物在2018和2019年都有记录,再筛选这些动物的所有行——动物C仅在2019年有数据,会被完全排除。

实现代码

library(dplyr)

df_filtered1 <- df %>%
  group_by(Animal) %>%
  # 筛选同时存在2018、2019年记录的动物
  filter(any(Year == 2018) & any(Year == 2019)) %>%
  ungroup()

# 查看结果
df_filtered1

输出结果

# A tibble: 9 × 4
  Animal  Year  Week Value
  <chr>  <dbl> <dbl> <dbl>
1 A       2018    15    14
2 B       2017    15     6
3 B       2019    16     9
4 A       2018    17    17
5 B       2019    15    25
6 A       2019    16    27
7 B       2017    15    20
8 B       2018    18     3
9 A       2019    15     5
需求2:保留每周观测数超过2的动物对应的行

思路

先按「动物+周」的组合分组,统计每组的观测行数,再筛选出行数超过2的组合对应的所有行——只有动物B的第15周有3条记录,所以最终只保留这3行。

实现代码

df_filtered2 <- df %>%
  group_by(Animal, Week) %>%
  # 新增临时列统计每组行数
  mutate(row_count = n()) %>%
  # 筛选行数>2的组
  filter(row_count > 2) %>%
  # 移除临时统计列
  select(-row_count) %>%
  ungroup()

# 查看结果
df_filtered2

输出结果

# A tibble: 3 × 4
  Animal  Year  Week Value
  <chr>  <dbl> <dbl> <dbl>
1 B       2017    15     6
2 B       2019    15    25
3 B       2017    15    20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:12:28