我有以下数据:
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
答案 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