【发布时间】:2019-07-10 09:56:05
【问题描述】:
我知道有很多问题,听起来可能有些相似,但我无法找到我确切问题的答案。
假设我们有一个玩具数据集
library(tidyverse)
df <- tibble(
Gender = c("m", "f", "f", "m", "m",
"f", "f", "f", "m", "f"),
IQ = rnorm(10, 100, 15),
Other = runif(10),
Test = rnorm(10),
group2 = c("A", "A", "A", "A", "A",
"B", "B", "B", "B", "B")
)
我们要从中计算mean、min 和max 的gender 和group2。
只有一组,我可以很容易地写出来
df %>%
group_by(Gender) %>%
select_if(is.numeric) %>%
gather(Variable, Value, -Gender) %>%
group_by(Variable, Gender) %>%
summarise(mean = mean(Value),
min = min(Value),
max = max(Value)) %>%
ungroup()
得到
Variable Gender mean min max
<chr> <chr> <dbl> <dbl> <dbl>
1 IQ f 99.2 81.9 121.
2 IQ m 89.0 62.5 106.
3 Other f 0.301 0.187 0.479
4 Other m 0.395 0.0483 0.757
5 Test f -0.0770 -1.18 0.545
6 Test m 0.163 -0.632 0.828
但我不知道如何为多个组做同样的事情。我知道我可以像这样使用summarise_*()
df %>%
group_by(Gender) %>%
summarise_if(is.numeric, list(mean = mean,
min = min,
max = max))
但它返回宽格式(如data.table)
Gender IQ_mean Other_mean Test_mean IQ_min Other_min Test_min IQ_max
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 f 99.2 0.301 -0.0770 81.9 0.187 -1.18 121.
2 m 89.0 0.395 0.163 62.5 0.0483 -0.632 106.
# … with 2 more variables: Other_max <dbl>, Test_max <dbl>
当您有 10 多个变量时,这几乎没有用。
我在这里缺少什么?
【问题讨论】:
标签: r dplyr data.table