Трудное время с dplyr - n_distinct или распространения - работа с подгруппами - PullRequest
0 голосов
/ 28 мая 2018

Я полагаю, что этот вопрос дублирован, но я не смог найти никакого рабочего ответа, чтобы использовать dplyr простым и элегантным способом для добавления подсчета подгрупп после group_by.Если этот вопрос повторяется, пожалуйста, удалите.Если вы хотите воспроизвести код, я сделаю это.Пожалуйста, не нажимайте на «негатив».

Я пытался использовать распространение , но это было бесполезно, после того, как я пытался следовать инструкциям здесь , как только это помогает считать уникальныепо группам в кадре данных, но это не работает.То же решение здесь , но вывод странный.

Что у меня есть: enter image description here

Что я действительно хочу (используя простойкод ... Я полагаю, что dplyr может справиться с этим без необходимости использования collect ()), это вставить три новых столбца для каждого факторного уровня.

enter image description here

Мой код:

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) 

enter image description here

Это воспроизводимый код для работы с:

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()

Требуемый вывод: enter image description here Большое спасибо

Последнее редактирование:

Благодаря @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)

1 Ответ

0 голосов
/ 28 мая 2018

Мы можем сделать это в одной цепочке

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)
...