使用dplyr更好的输出-打破功能和结果

时间:2018-07-17 03:15:51

标签: r dplyr tidyverse

这是一个长期的问题,但是现在我真的可以解决这个难题了。我一直在使用dplyr,我认为总结变量很棒。但是,我试图显示仅部分成功的数据透视表。 Dplyr总是报告所有结果的一行,这很烦人。我必须将结果复制粘贴以擅长组织所有内容...

我收到了代码here 并且几乎可以正常工作。

此结果 enter image description here

应如下所示: enter image description here

因为我总是使用这种样式报告结果 enter image description here

使用此代码可获得相同的结果:

library(tidyverse) 
set.seed(123)
ds <- data.frame(group=c("american", "canadian"), 
                 iq=rnorm(n=50,mean=100,sd=15),
                 income=rnorm(n=50, mean=1500, sd=300),
                 math=rnorm(n=50, mean=5, sd=2))
ds %>% 
  group_by(group) %>% 
   summarise_at(vars(iq, income, math),funs(mean, sd)) %>%
  t %>% 
  as.data.frame %>% 
  rownames_to_column %>%
  separate(rowname, into = c("feature", "fun"), sep = "_")

为澄清起见,我已经tried this code,但点差仅适用于一个摘要(均值或sd等)。有些人使用collect(),但要使用group_by和collect()则很复杂。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

t步骤之后,而不是转置(summarise)和更改类类型,而是执行gather将其更改为'long'格式,然后进行spread使用separateunite

进行一些修改后,它又返回了
library(tidyverse)
ds %>% 
  group_by(group) %>% 
  summarise_at(vars(iq, income, math),funs(mean, sd)) %>% 
  gather(key, val, iq_mean:math_sd) %>% 
  separate(key, into = c('key1', 'key2')) %>% 
  unite(group, group, key2) %>%
  spread(group, val)