我想这个问题是重复的,但我找不到任何有效的答案,以简单优雅的方式使用dplyr在group_by之后添加子组计数。如果此问题重复,请删除。如果你想要一个代码重现,我会这样做。请不要点击“否定”。
我曾尝试使用传播,但之后没有用,之后,我尝试按照说明here,一旦它有助于按组计算唯一数据框,但它不起作用。同样的解决方案是here,但输出很奇怪。
我真正想要的(使用简单的代码......我想dplyr可以处理它而不必使用gather()),就是为每个因子级别插入三个新列。
我的代码:
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)
答案 0 :(得分:1)
我们可以在一个链中实现这个目标
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)