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

如何在R语言中从两个数据集移除关联观测值

解决方案

要实现这个按行匹配移除的逻辑,可以借助dplyr包处理分组计数与筛选,具体步骤如下:

步骤1:统计data_1中每个(ID, week)组合的出现次数

这一步用来确定每个(ID, week)需要从data_2中移除的记录数量:

library(dplyr)

# 统计data_1中各(ID, week)的行数
remove_counts <- data_1 %>%
  group_by(ID, week) %>%
  summarise(remove_n = n(), .groups = "drop")

步骤2:给data_2的每个(ID, week)分组添加行号

通过行号区分同一组内的不同记录,方便后续精准筛选:

data_2_with_rowid <- data_2 %>%
  group_by(ID, week) %>%
  mutate(row_num = row_number()) %>%
  ungroup()

步骤3:关联计数并筛选保留的记录

将data_2的行号与需要移除的数量对比,保留行号大于移除数量的记录:

result <- data_2_with_rowid %>%
  left_join(remove_counts, by = c("ID", "week")) %>%
  # 对data_1中不存在的ID-week组合,移除数量设为0
  mutate(remove_n = replace_na(remove_n, 0)) %>%
  filter(row_num > remove_n) %>%
  select(ID, speciale, week) # 保留目标列

运行代码后得到的result即为期望输出:

> result
# A tibble: 2 × 3
     ID speciale week 
  <dbl>    <dbl> <chr>
1     1    80001 0109 
2     1    80001 0212 

该方法完全遵循“data_1每一行对应移除data_2一行匹配记录”的规则,无需使用distinct(),适配复杂数据集场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:41:07