r - 一起使用 summarise、cross 和 quantile 函数
问题描述
我正在尝试使用mtcars
数据集来计算汇总统计数据。这是我的代码 -
df <- as_tibble(mtcars)
df.sum2 <- df %>%
select(mpg, cyl, vs, am, gear, carb) %>%
mutate(across(where(is.factor), as.numeric)) %>%
summarise(across(
.cols = everything(),
.fns = list(
Min = min,
Q25 = quantile (., 0.25),
Median = median,
Q75 = quantile (., 0.75),
Max = max,
Mean = mean,
StdDev = sd,
N = n()
), na.rm = T,
.names = "{col}_{fn}"
)
)
但我收到以下错误 -
错误:
summarise()
输入有问题..1
。x 不能对不存在的列进行子集化。x 位置 65、66、69、71、76 等不存在。i 只有 6 列。i 输入..1
是across(...)
。
如果我从上面的代码中取出Q25 = quantile (.,0.25)
and ,它工作正常。Q75 = quantile (.,0.75)
实际上,我可以使用以下代码获得预期的结果 -
df.sum <- df %>%
select(mpg, cyl, vs, am, gear, carb) %>% # select variables to summarise
summarise_each(funs(Min = min,
Q25 = quantile (., 0.25),
Median = median,
Q75 = quantile (., 0.75),
Max = max,
Mean = mean,
StdDev = sd,
N = n()))
但我想用across
函数来使用summarise
函数。我不想使用该summarise_each
功能。
解决方案
您需要在传递其他参数时使用匿名函数或公式语法。尝试
library(dplyr)
df.sum2 <- df %>%
select(mpg, cyl, vs, am, gear, carb) %>%
mutate(across(where(is.factor), as.numeric)) %>%
summarise(across(
.cols = everything(),
.fns = list(
Min = min,
Q25 = ~quantile(., 0.25),
Median = median,
Q75 = ~quantile(., 0.75),
Max = max,
Mean = mean,
StdDev = sd,
N = ~n()
),
.names = "{col}_{fn}"
)
)
推荐阅读
- spring-boot - 在 Spring Boot OAuth2RestOperations 中刷新 OAuth 令牌
- laravel - 如何在 laravel 中设置最小的增量 id
- java - 未知原因:java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 from Command Line
- c++ - 具有静态存储持续时间的常量初始化变量的初始化顺序
- java - Spring mongo 只写字段
- python - 在 Catalina 更新后 subprocess.call() 失败并出现错误 -43
- java - 有没有办法将子序列记忆到变量中?
- graphql - 如何在 DynamoDB 中保存 Quill.js Delta
- javascript - 使用 useEffect 填充多个下拉数据
- javascript - 如何使用 .map 遍历对象?