在R中如何基于多条件自动删除数据框(data frame)中的指定行?
R 按分组条件筛选数据框行的实现方法
完全可以实现该需求,核心逻辑是按Number分组后,优先保留Value为TRUE的行,无TRUE时随机保留1行即可,以下是两种常用实现方案:
方案1:tidyverse(dplyr)实现(代码可读性最高)
先构造示例数据方便验证效果:
library(dplyr) # 构造示例数据 df <- tibble( Number = rep(1:5, each = 2), Value = c(TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE) )
处理代码:
result <- df %>% group_by(Number) %>% # 按Value降序排列,TRUE会自动排在FALSE前面 arrange(desc(Value), .by_group = TRUE) %>% # 取每组第一行即可 slice(1) %>% ungroup()
逻辑说明:如果组内存在Value=TRUE的记录,排序后会排在第一位,slice(1)就会保留该行;如果组内全为FALSE,则随机保留排序后的第一行,完全符合需求
方案2:Base R 实现(无需加载第三方包)
# 先按Number升序、Value降序排序 df_sorted <- df[order(df$Number, -df$Value), ] # 按Number去重,保留第一次出现的行 result <- df_sorted[!duplicated(df_sorted$Number), ]
两种方案最终输出的结果都是每个Number对应唯一1行,满足要求。
内容的提问来源于stack exchange,提问作者Noah Friesen
相关产品推荐
相关产品推荐

