Я знаю, что есть много вопросов, которые могут показаться похожими так или иначе, но я не смог найти ответ на свой точный вопрос.
Допустим, у нас есть набор игрушечных данных
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 переменных.
Что мне здесь не хватает?