【问题标题】:In dplyr when summarising after filtering the row name is not showing up在 dplyr 中,在过滤行名后进行汇总时未显示
【发布时间】:2021-01-09 18:58:01
【问题描述】:

例如,在 mtcars 数据集中,我想获得具有最大 HP 并且具有 6 个气缸和齿轮的汽车,因此我运行代码并获取值但汽车的名称没有显示,我该如何更改?

+ filter(cyl=="6" & gear=="4") %>% 
+ select(hp)
> v=mtcars %>% 
+ filter(cyl=="6" & gear=="4") %>% 
+ select(hp) %>% 
+ summarise(max(hp))

这是结果

> v
  max(hp)
1     123

【问题讨论】:

    标签: r dplyr data-manipulation


    【解决方案1】:

    在magrittr 的管道运算符的帮助下使用基本 R 函数以提高可读性。

    library(magrittr)
    
    mtcars %>%
      subset(cyl == 6 & gear == 4) %>%
      subset(hp == max(hp)) %>%
      rownames()
    
    #[1] "Merc 280"  "Merc 280C"
    

    请注意,以上两辆车的最大hp 值相同,因此它会返回两个车名。

    【讨论】:

      【解决方案2】:

      我们可以创建一列行名,因为 tidyverse 会剥离行名属性

      library(dplyr)
      mtcars %>%
         rownames_to_column('rn') %>%
         filter(cyl=="6" & gear=="4") %>% 
         select(rn, hp) %>% 
         slice(which.max(hp))
      

      在这种特殊情况下,summarise 步骤删除了行名。根据?summarise

      不保留数据框属性,因为 summarise() 从根本上创建了一个新数据框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 2016-06-03
        • 2021-07-27
        • 1970-01-01
        相关资源
        最近更新 更多