r-将相关值添加到汇总的tibble中

  • 本文关键字:tibble 添加 r tidyverse
  • 更新时间 :
  • 英文 :


这可能很容易,但我自己找不到答案。

以虹膜数据集为例,我想使用以下查询来获得每个物种的最大花瓣宽度:

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,我想得到这些信息和结果。

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参数进行选择(默认保留所有平局行(。

最新更新