[英]group data and filter groups by two columns (dplyr)
我有一个关于使用dplyr
过滤数据集的问题。
我想按其RestaurantID
对数据进行分组,然后filter()
在Year==1992
wage >= 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
所有行。
我们可以在不使用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
如果您希望返回该组的所有行,则可以为每个 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
请注意,在比较数字时,您不应该将它们像“5”一样用引号引起来,因为这会将数字转换为字符。
或者,您可以将原始方法修改为:
df %>% group_by(RestaurantID) %>% filter(any(Wage >= 5 & Year == 92))
这也返回正确的子集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.