我对dplyr有疑问。
我想通过其RestaurantID对数据进行分组,然后在1992年过滤所有工资> = 5的群组。
例如:
我有:
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。
答案 0 :(得分: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
答案 1 :(得分:2)
如果您希望返回该组的所有行,则每个ID都有一个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
请注意,在比较数字时,您不应该引用它们,例如&#39; 5&#39;因为这会将数字变成字符。
或者,您可以将原始方法修改为:
df %>% group_by(RestaurantID) %>% filter(any(Wage >= 5 & Year == 92))
也会返回正确的子集。