【问题标题】:Dplyr pipe groupby top_n does not get top_n in groupDplyr pipe groupby top_n 在组中没有得到 top_n
【发布时间】:2020-08-24 20:36:15
【问题描述】:

我正在尝试获取按字母顺序排列的每个组的前 2 个名称。我认为top_n() 在我执行 group_by 后会选择这个。然而,情况似乎并非如此。这段代码说明了问题。

df <- data.frame(Group = c(0, 0, 0, 1, 1, 1),
                 Name = c("a", "c", "b", "e", "d", "f"))

df <- df %>%
      arrange(Name, Group) %>%
      group_by(Group) %>%
      top_n(2)

df

# A tibble: 2 x 2
# Groups:   Group [1]
  Group Name 
  <dbl> <chr>
1     1 e    
2     1 f 

预期的输出是:

df <- df %>%
      arrange(Name, Group) %>%
      group_by(Group) %>%
      top_n(2)
df

      Group Name
1     0    a
2     0    b
3     1    d
4     1    e

或类似的东西。谢谢。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    top_n 选择顶部 n 最大值。您似乎需要最高 n 最小值。您可以使用带有负值的索引来获得它。另外,使用top_n 时不需要arrange 数据。

    library(dplyr)
    df %>% group_by(Group) %>% top_n(-2, Name)
    
    
    #  Group Name 
    #  <dbl> <chr>
    #1     0 a    
    #2     0 b    
    #3     1 e    
    #4     1 d    
    

    另一种方法是arrange 数据并选择每组中的前两行。

    df %>% arrange(Group, Name) %>% group_by(Group) %>% slice(1:2)
    

    【讨论】:

      【解决方案2】:

      我们可以使用

      library(dplyr)
      df %>% 
        arrange(Group, Name) %>% 
        group_by(Group) %>% 
        filter(row_number() < 3)
      

      【讨论】:

        猜你喜欢
        • 2020-12-26
        • 1970-01-01
        • 2014-09-19
        • 2017-01-15
        • 2019-06-08
        • 1970-01-01
        • 2016-07-20
        • 1970-01-01
        • 2018-07-10
        相关资源
        最近更新 更多