如何删除number列中唯一值出现次数少于指定次数的行?
过滤tibble中出现次数达标行
首先构造示例数据:
library(tibble) df <- tibble( number = c(1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5) )
方法1:分组后直接过滤(推荐)
使用dplyr包的分组与过滤功能,通过n()获取每组的行数,筛选出行数达标的组:
library(dplyr) # 保留number出现次数≥5的行 df_filtered_5 <- df %>% group_by(number) %>% filter(n() >= 5) %>% ungroup()
执行后结果:
# A tibble: 5 × 1 number <dbl> 1 5 2 5 3 5 4 5 5 5
# 保留number出现次数≥4的行 df_filtered_4 <- df %>% group_by(number) %>% filter(n() >= 4) %>% ungroup()
执行后结果:
# A tibble: 9 × 1 number <dbl> 1 4 2 4 3 4 4 4 5 5 6 5 7 5 8 5 9 5
方法2:添加计数变量后过滤
先为每个number添加出现次数的列,再基于该列过滤:
# 添加计数列 df_with_count <- df %>% add_count(number, name = "count_number") # 过滤次数≥5的行(可选删除计数列) df_filtered_5_v2 <- df_with_count %>% filter(count_number >= 5) %>% select(-count_number) # 过滤次数≥4的行 df_filtered_4_v2 <- df_with_count %>% filter(count_number >= 4) %>% select(-count_number)
基础R实现(无需dplyr)
如果不想加载第三方包,可使用基础R的table()统计次数后过滤:
# 统计每个number的出现次数 counts <- table(df$number) # 筛选保留的number值 keep_vals_5 <- names(counts[counts >= 5]) keep_vals_4 <- names(counts[counts >= 4]) # 过滤数据 df_filtered_5_base <- df[df$number %in% keep_vals_5, ] df_filtered_4_base <- df[df$number %in% keep_vals_4, ]
内容的提问来源于stack exchange,提问作者KLG
相关产品推荐
相关产品推荐

