【问题标题】:Filter rows within groups based on multiple conditions根据多个条件过滤组内的行
【发布时间】:2017-08-03 05:37:44
【问题描述】:

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

鉴于此数据框:

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 进行过滤,但我不确定我是否能做到这一点。

【问题讨论】:

标签: r dataframe filter


【解决方案1】:

我们可以使用dplyr。按'group'分组后,filter'hit'不等于0的行和(&)'fruit'作为'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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多