我希望用简洁的tibble来报告特定列(price
、age
和dist
)在houses
数据集中的最小、最大和平均。现在,我有以下代码,它使用1x9 tibble生成了一个相当不雅致的解决方案:
houses %>%
select(price, age, dist) %>%
summarize_each(list(min = min, max = max, mean = mean))
我希望创建一个更有组织的解决方案,使用管道,将选定的数据作为行,摘要统计数据(min,max,均)作为列,从而生成3x3Tible。有什么想法吗?
发布于 2021-09-30 20:10:44
您可以首先以长格式获取数据,然后为每一列计算汇总统计信息。下面是mtcars
数据集的一个示例。
library(dplyr)
library(tidyr)
mtcars %>%
select(mpg, disp, cyl) %>%
pivot_longer(cols = everything()) %>%
group_by(name) %>%
summarise(min = min(value, na.rm = TRUE),
max = max(value, na.rm = TRUE),
mean = mean(value, na.rm = TRUE))
# name min max mean
# <chr> <dbl> <dbl> <dbl>
#1 cyl 4 8 6.19
#2 disp 71.1 472 231.
#3 mpg 10.4 33.9 20.1
发布于 2021-09-30 14:59:04
输出dataframe
的可能解决方案
library(dplyr)
houses %>%
summarise(across(c(price,age,dist),c(max,min,mean))) %>%
matrix(ncol = 3, byrow = T) %>%
as.data.frame() %>%
rename(Max=V1, Min=V2, Mean=V3)
输出tibble
的可能解决方案
library(dplyr)
houses %>%
summarise(across(c(price,age,dist),c(max,min,mean))) %>%
matrix(ncol = 3, byrow = T) %>%
tibble(Max=unlist(.[,1]),Min=unlist(.[,2]),Mean=unlist(.[,3])) %>%
select(Max,Min,Mean)
编辑(2021-10-01)
一个非常简短的解决方案:
library(dplyr)
library(purrr)
map_dfc(c("Max","Min","Mean"),
~ tibble(!!sym(.x) := apply(select(houses, price, age, dist),2,tolower(.x))))
https://stackoverflow.com/questions/69399378
复制相似问题