如何基于条件在R中删除重复行?优先tidyverse方案
解决方案(tidyverse 实现)
基于你提供的数据特性(含x=1的行是对应id的最后一行且唯一,无x=1的id全为x=0),可以用以下tidyverse代码实现需求:
library(tidyverse) df <- data.frame(id = c("001", "001", "001", "002", "002", "003", "003"), x = c(0, 0, 0, 0, 1, 0, 1)) df_cleaned <- df %>% group_by(id) %>% slice_max(x, n = 1, with_ties = FALSE) %>% ungroup() print(df_cleaned)
代码解释
group_by(id):按id分组,对每个个体的数据单独处理slice_max(x, n = 1, with_ties = FALSE):在每个组内选取x值最大的行(x仅为0或1,最大的就是1;若组内全是0,则任选一行0),with_ties = FALSE确保即使存在多个相同最大值(如全0组)也只保留一行ungroup():取消分组,恢复为普通数据框结构
输出结果
运行代码后得到与期望一致的结果:
# A tibble: 3 × 2 id x <chr> <dbl> 1 001 0 2 002 1 3 003 1
另一种贴合数据特性的简化写法(利用x=1是对应组最后一行的特点):
df_cleaned <- df %>% group_by(id) %>% slice_tail(n = 1) %>% ungroup()
该写法直接取每个组的最后一行,因数据特性保证了含x=1的组最后一行就是1,全0组最后一行是0,同样能得到正确结果。
内容的提问来源于stack exchange,提问作者aerw4
相关产品推荐
相关产品推荐

