簡體   English   中英

dplyr-summarise,保留原來的組名

[英]dplyr-summarise, keep the original group name

iris %>% mutate(subgroup=rep(c('A','B'),75)) %>% group_by(Species) %>% summarise(SLmin=min(Sepal.Length))



  Species    SLmin
  <fct>      <dbl>
1 setosa       4.3
2 versicolor   4.9
3 virginica    4.9

我想保留原始子組名稱。

iris %>% mutate(subgroup=rep(c('A','B'),75)) %>% group_by(Species,subgroup) %>% summarise(SLmin=min(Sepal.Length))

  Species    subgroup SLmin
  <fct>      <chr>    <dbl>
1 setosa     A          4.4
2 setosa     B          4.3
3 versicolor A          5  
4 versicolor B          4.9
5 virginica  A          4.9
6 virginica  B          5.6

此代碼無法在每個物種中獲得最小值。

你知道什么想法嗎?

PS:

很難解釋,所以我會解決它。

我需要分組。
總結結果后。

setosa     B          4.3  
versicolor B          4.9
virginica  A          4.9

您可以使用which.min獲取which.min最小值的Sepal.Length ,該索引可用於對相應的subgroup值進行子集化。

library(dplyr)

iris %>% 
  mutate(subgroup=rep(c('A','B'),75)) %>% 
  group_by(Species) %>% 
  summarise(SLmin=min(Sepal.Length), 
            subgroup = subgroup[which.min(Sepal.Length)])

#  Species    SLmin subgroup
#  <fct>      <dbl> <chr>   
#1 setosa       4.3 B       
#2 versicolor   4.9 B       
#3 virginica    4.9 A       

另一種方法是選擇每個Species的最小行,然后只選擇我們在最終輸出中需要的那些列。

iris %>% 
  mutate(subgroup=rep(c('A','B'),75)) %>% 
  group_by(Species) %>% 
  slice(which.min(Sepal.Length))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM