根据多个条件筛选组内的行

时间:2017-03-13 08:56:17

标签: r dataframe filter

我有一个数据集,我想在不同的组中过滤行。

鉴于此数据框:

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 1apples是第一次出现,它有两次正面命中,因此我想保留这两行。

结果如下:

  group   fruit hit
     1  apples   1
     1  apples   1
     2 oranges   1
     3 bananas   1
     3 bananas   1

我知道您可以使用dplyr进行过滤,但我不确定是否可以实现此目的。

1 个答案:

答案 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