Я полагаю, что этот вопрос дублирован, но я не смог найти никакого рабочего ответа, чтобы использовать dplyr простым и элегантным способом для добавления подсчета подгрупп после group_by.Если этот вопрос повторяется, пожалуйста, удалите.Если вы хотите воспроизвести код, я сделаю это.Пожалуйста, не нажимайте на «негатив».
Я пытался использовать распространение , но это было бесполезно, после того, как я пытался следовать инструкциям здесь , как только это помогает считать уникальныепо группам в кадре данных, но это не работает.То же решение здесь , но вывод странный.
Что у меня есть:
Что я действительно хочу (используя простойкод ... Я полагаю, что dplyr может справиться с этим без необходимости использования collect ()), это вставить три новых столбца для каждого факторного уровня.
Мой код:
descritivos %>%
group_by(sexo) %>%
summarise(n=n(),Idade_media = mean(idade, na.rm=T),
idade_sd=sd(idade, na.rm=T),
qtde_sexo = n(),
Proporção_sexo = n()/nrow(.),
Pontuação_media=mean(total),
pontuacao_sd=sd(total), n_unique = n_distinct(Escolaridade))
С этим кодом я почти был там, но он дублирует некоторый вывод.
descritivos %>%
group_by(sexo, Escolaridade) %>%
summarise(n=n(),Idade_media = mean(idade, na.rm=T),
idade_sd=sd(idade, na.rm=T),
qtde_sexo = n(),
Proporção_sexo = n()/nrow(.),
Pontuação_media=mean(total),
pontuacao_sd=sd(total), n_unique = n_distinct(Escolaridade)) %>% spread(Escolaridade, n)
spread(count(Escolaridade), n, fill=0)
Это воспроизводимый код для работы с:
library(tidyverse)
ds <- data.frame(sex=c(0,1), schooling=c("k12","high","college","university"), age=rnorm(mean=20,sd=2, n=40))
ds %>% group_by(sex, schooling) %>%
summarise(mean(age), n=n()) %>% spread(schooling, n)
ds %>% group_by(sex, schooling) %>%
summarise(n()) %>% t()
Требуемый вывод: Большое спасибо
Последнее редактирование:
Благодаря @Akrun я решил свой вопрос.Если у вас есть то же самое, пожалуйста, следуйте этому коду:
descritivos %>%
group_by(sexo) %>%
group_by(Escolaridade,
Idade_media = mean(idade, na.rm=T),
idade_sd=sd(idade, na.rm=T),
qtde_sexo = n(),
Proporção_sexo = n()/nrow(.),
Pontuação_media=mean(total),
pontuacao_sd=sd(total), add=TRUE) %>%
summarise(n=n()) %>%
spread(Escolaridade, n)
или этот код для воспроизводимого кода:
ds %>% group_by(sex) %>%
group_by(schooling = paste0("school", schooling), Mean = mean(age),
ndist = n_distinct(schooling), add = TRUE) %>% summarise(n = n()) %>%
spread(schooling, n)