【问题标题】: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() 从根本上创建了一个新数据框。