【问题标题】:Using filter with count使用带计数的过滤器
【发布时间】:2014-12-21 18:56:01
【问题描述】:

我正在尝试使用 count() 助手过滤行。 我想要输出的是map %>% count(StudentID) = 3 所在的所有行。

例如在下面的 df 中,它应该取出所有 StudentID 为 10016 和 10020 的行,因为它们只是其中的 2 个实例,而我想要 3 个。

StudentID StudentGender Grade     TermName      ScaleName TestRITScore
100             M     9    Fall 2010    Language Usage          217
100             M    10    2011-2012    Language Usage          220
100             M     9    Fall 2010    Reading                 210
10016           M     6    Fall 2010    Language Usage          217
10016           M     6    Fall 2010    Mathematics             210
10020           F     7    Fall 2010    Language Usage          210
10020           F     7    Fall 2010    Mathematics             213
10022           F     8    Fall 2010    Language Usage          232
10022           F     9    2011-2012    Language Usage          240
10022           F     8    Fall 2010    Mathematics             242

如果我这样做:

count(df, StudentID)

那么它只给了我一个 2 列的 df,但我想保留我的 df 的所有列。这就是为什么我认为我应该使用过滤器。

【问题讨论】:

    标签: r filter count dplyr


    【解决方案1】:

    我认为count 不是您要找的。改用n()

    df %>% 
      group_by(StudentID) %>%
      filter(n() == 3)
    
    # Source: local data frame [6 x 6]
    # Groups: StudentID
    # 
    #   StudentID StudentGender Grade  TermName      ScaleName TestRITScore
    # 1       100             M     9 Fall 2010 Language Usage          217
    # 2       100             M    10 2011-2012 Language Usage          220
    # 3       100             M     9 Fall 2010 Reading                 210
    # 4     10022             F     8 Fall 2010 Language Usage          232
    # 5     10022             F     9 2011-2012 Language Usage          240
    # 6     10022             F     8 Fall 2010 Mathematics             242
    

    【讨论】:

    • count 绝对是最前沿的dplyr,但它的预期目的并不是 OP 所需要的。你很准。
    • 不想刻薄,而是在 PDF 中搜索“count(
    • @hrbrmstr 是的。我可能有一个旧版本的dplyr
    • @hrbrmstr,无论如何,我修正了标题,因为我有一个旧版本的 dplyr 不包含 count
    • 另一个选项是df %>% semi_join(df %>% count(StudentID) %>% filter(n > 3))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多