我想使用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.请提前预测!
答案 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