R dplyr:如何删除较小的组?

时间:2016-09-03 01:35:35

标签: r dplyr

我想使用dplyr删除较小的群组。例如,dataframe:

ID group value
1    1     6
2    1     2
3    2     0
4    2     5
5    2     3
6    3     7
7    3     1
8    4     3
9    4     7
10   4     5

组1,组2,组3和组4的组大小分别为2,3,2和3,我想删除组1和组3,因为它们的大小小于3.请提前预测!

3 个答案:

答案 0 :(得分:8)

您可以使用n()获取每个组的行数,并对其进行过滤,请查看?n(),有关n()用法的最后一个示例是基于过滤的关于群体的大小:

df %>% group_by(group) %>% filter(n() >= 3)

# Source: local data frame [6 x 3]
# Groups: group [2]

#      ID group value
#   <int> <int> <int>
# 1     3     2     0
# 2     4     2     5
# 3     5     2     3
# 4     8     4     3
# 5     9     4     7
# 6    10     4     5

答案 1 :(得分:1)

df %>% group_by(group) %>% mutate(n=n()) %>% ungroup %>% filter(n!=min(n)) %>% select(-n)

答案 2 :(得分:0)

我们也可以使用data.table。将“data.frame”转换为“data.table”(setDT(df1)),按“组”分组,if组内的观察数量(.N)大于2 ,获取Data.table的子集

library(data.table)
setDT(df1)[, if(.N >2 ) .SD,  by = group]
#    group ID value
#1:     2  3     0
#2:     2  4     5
#3:     2  5     3
#4:     4  8     3
#5:     4  9     7
#6:     4 10     5

base R

tbl <- table(df1$group)> 2
subset(df1, group %in% names(tbl)[tbl])
#    ID group value
#3   3     2     0
#4   4     2     5
#5   5     2     3
#8   8     4     3
#9   9     4     7
#10 10     4     5