【问题标题】:add relevant value to summarised tibble为汇总的标题添加相关值
【发布时间】:2021-02-15 13:06:11
【问题描述】:

这应该很容易,但我无法自己找到答案。

以鸢尾花数据集为例,我想获取每个物种的最大花瓣宽度,使用以下查询:

iris %>% group_by(Species) %>% summarise(max(Petal.Width))

返回以下结果:

# A tibble: 3 x 2
  Species    `max(Petal.Width)`
  <fct>                   <dbl>
1 setosa                    0.6
2 versicolor                1.8
3 virginica                 2.5

现在我想知道具有最大花瓣宽度值的每一行的花瓣长度。[1] 我该怎么做呢?选择不起作用:

iris %>% group_by(Species) %>% select(Species,Petal.Length,Petal.Width) %>% summarise(max_val = max(Petal.Width))

因为我没有得到花瓣长度属性仍然缺少这个。

1:例如,花瓣宽度为 1.8 且物种为杂色的行,花瓣长度为 4.8 - 我想要此信息和结果。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    summarize 视为聚合行 - 将它们组合起来。它适用于meanmaxn_distinct 等函数,这些函数给出了一个列的单个数字摘要。

    max 是一种特殊情况——它是一个单一的数字汇总函数,但它实际上并不组合值。在这种情况下,您不想找到最大值,而是想找到具有最大值的行。保留特定行是 filter 操作,而不是 summarize 操作,因此我们可以通过几种不同的方式进行操作。

    ## keep the row(s) with the maximum Petal Width
    iris %>% 
      group_by(species) %>%
      filter(Petal.Width == max(Petal.Width))  
    
    ## sort by petal width and keep top row in each group
    iris %>% 
      group_by(Species) %>%
      ## order the data by descending `Petal.Width`
      arrange(desc(Petal.Width)) %>%
      ## keep the top row
      slice(1)
    
    ## use the built-in function for this particular case!
    iris %>%
      group_by(Species) %>%
      slice_max(Petal.Width)
    

    这些基本相同 - 如果有最大花瓣宽度的行的关系,它们会有所不同 - slice(1) 方法将只保留一行,Petal.Width == max(Petal.Width) 将保持所有行并列最大,而slice_max 方法将让您选择使用with_ties 参数(默认保留所有绑定的行)。

    【讨论】:

    • 这是一个很大的帮助,感谢您的详细回答。
    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多