如何在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
相关产品推荐
相关产品推荐

