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

如何在R语言多数据框列的唯一组合中保留两个Lot值

问题

需要针对Var_1、Var_2、Var_3的每个唯一组合,返回对应的2个Lot编号。

初始数据如下:

my_data <- read.table(header=TRUE, text="
Var_1   Var_2   Var_3   Lot
A   B   E   X
A   B   E   Y
A   B   E   Z
A   C   E   X
A   C   E   Y
A   C   E   Z
A   C   D   X
A   C   D   Y
A   C   D   Z
")

期望输出:

my_output <- read.table(header=TRUE, text="
Var_1   Var_2   Var_3   Lot
A   B   E   X
A   B   E   Y
A   C   E   X
A   C   E   Y
A   C   D   X
A   C   D   Y
")

尝试了以下代码,但返回了每个组合对应的全部3个Lot,不符合预期:

my_data %>% count(Var_1, Var_2, Var_3, Lot, sort = TRUE) %>% top_n(2, n)
解决方案

你之前的代码问题在于count(Var_1, Var_2, Var_3, Lot)是按4个变量共同分组,每个Lot对应的计数n都是1,top_n(2, n)会保留所有计数≥1的行,所以才会返回全部3个Lot。

正确的做法是按Var_1、Var_2、Var_3分组,然后每组提取前2行:

library(dplyr)

my_data %>%
  group_by(Var_1, Var_2, Var_3) %>%
  slice_head(n = 2) %>%
  ungroup()

如果需要确保按Lot的特定顺序提取(比如按字母排序),可以先在分组内排序:

my_data %>%
  group_by(Var_1, Var_2, Var_3) %>%
  arrange(Lot, .by_group = TRUE) %>%
  slice_head(n = 2) %>%
  ungroup()

这两种方法都能得到你想要的输出,每个Var_1/Var_2/Var_3组合只保留2个Lot编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:40:02