2016-07-13 11 views
3

У меня есть следующие данные:Удаление строки на основе первого значения группы

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

Мы можем использовать 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))),] 
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 
Смежные вопросы