根据组的第一个值删除行

时间:2016-07-13 17:56:59

标签: r

我有以下数据:

  group health   result
1     a      H    7
2     a      H    8
3     a      N    9
4     b      H    10
5     b      H    5
6     b      H    4
7     c      H    3
8     c      H    2
9     c      N    1

如果每组中的第一个结果小于7,我希望将数据分组并仅删除整个组。

结果如下:

  group health   result
1     a      H    7
2     a      H    8
3     a      N    9
4     b      H    10
5     b      H    5
6     b      H    4

2 个答案:

答案 0 :(得分:2)

我们可以使用data.table

library(data.table)
setDT(df1)[, if(result[1] >=7 ) .SD, group]

或使用dplyr

library(dplyr)
df1 %>% 
   group_by(group) %>%
   filter(first(result) >=7)
#   group health result
#  <chr>  <chr>  <int>
#1     a      H      7
#2     a      H      8
#3     a      N      9
#4     b      H     10
#5     b      H      5
#6     b      H      4

base R

df1[with(df1, as.logical(ave(result, group, FUN = function(x) x[1] >=7))),]

答案 1 :(得分:2)

或使用aggregate

a <- aggregate(df$result ~ df$group,df,head,1) # take the first row of each group
df[df$group %in% a[a[,2] >= 7,][,1],]

  # group health result
# 1     a      H      7
# 2     a      H      8
# 3     a      N      9
# 4     b      H     10
# 5     b      H      5
# 6     b      H      4