2017-12-19 10 views
0

dplyrに関する質問があります。グループデータとフィルタグループを2列(dplyr)

IがRestaurantIDによってグループデータにたいし、次いで例えば賃金> = 5 1992における

すべてのグループをフィルタリング:

私が持っている:

RestaurantID  Year  Wage 
    1    92   6 
    1    93   4 
    2    92   3 
    2    93   4 
    3    92   5 
    3    93   5 

データセットを私は(欲しいです1992年賃金> = 5のすべてのグループ)

RestaurantID  Year  Wage 
    1    92   6 
    1    93   4 
    3    92   5 
    3    93   5 

私は試しました:

data %>% group_by("RestaurantID") %>% filter(any(Wage>= '5', Year =='92'))

しかし、これは私に賃金が> = 5であるすべての行を提供します。

答えて

2

そのグループのすべての行が返されるようにするには、IDごとに1つのTRUE値を設定しても問題ありません。その場合、TRUE値はそのグループの長さにリサイクルされるため、すべての行が戻されます。

df %>% group_by(RestaurantID) %>% filter(Wage[Year == 92] >= 5) 
## A tibble: 4 x 3 
## Groups: RestaurantID [2] 
# RestaurantID Year Wage 
#   <int> <int> <int> 
#1   1 92  6 
#2   1 93  4 
#3   3 92  5 
#4   3 93  5 

数値を比較するときは、数字を文字に変換するため、数字を '5'のように引用しないでください。また、正しいサブセットを返し

df %>% group_by(RestaurantID) %>% filter(any(Wage >= 5 & Year == 92)) 

また、あなたはあなたの独創的なアプローチを変更することができます。

3

我々はfilter

library(dplyr) 
df1 %>% 
    filter(RestaurantID %in% RestaurantID[Year==92 & Wage>= 5]) 
# RestaurantID Year Wage 
#1   1 92 6 
#2   1 93 4 
#3   3 92 5 
#4   3 93 5 

かと同じロジックを使用してグループ化せずにこれを行うことができますbase R

subset(df1, RestaurantID %in% RestaurantID[Year==92 & Wage>= 5]) 
# RestaurantID Year Wage 
#1   1 92 6 
#2   1 93 4 
#5   3 92 5 
#6   3 93 5