2016-07-13 11 views
3

I以下のデータを有する:グループの最初の値に基づいて行を削除

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

を使用することができます10
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 
関連する問題