我有一个数据集,我想在不同的组中过滤行。
鉴于此数据框:
group = as.factor(c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3))
fruit = as.factor(c("apples", "apples", "apples", "oranges",
"oranges", "apples", "oranges",
"bananas", "bananas", "oranges", "bananas"))
hit = c(1, 0, 1, 1,
0, 1, 1,
1, 0, 0, 1)
dt = data.frame(group, fruit, hit)
dt
group fruit hit
1 apples 1
1 apples 0
1 apples 1
1 oranges 1
2 oranges 0
2 apples 1
2 oranges 1
3 bananas 1
3 bananas 0
3 oranges 0
3 bananas 1
我想使用组中第一次出现fruit
来过滤组。但还有另一个条件,我只想保留hit
等于1
的水果行。
因此,对于group 1
,apples
是第一次出现,它有两次正面命中,因此我想保留这两行。
结果如下:
group fruit hit
1 apples 1
1 apples 1
2 oranges 1
3 bananas 1
3 bananas 1
我知道您可以使用dplyr
进行过滤,但我不确定是否可以实现此目的。
答案 0 :(得分:3)
我们可以使用dplyr
。通过' group',filter
对有'命中'的行进行分组后不等于0和(&
)'水果'作为' fruit'
first
元素
library(dplyr)
dt %>%
group_by(group) %>%
filter(hit!=0 & fruit == first(fruit))
# group fruit hit
# <fctr> <fctr> <dbl>
#1 1 apples 1
#2 1 apples 1
#3 2 oranges 1
#4 3 bananas 1
#5 3 bananas 1