【问题标题】:Group_by (dplyr) with one factor as columnGroup_by (dplyr) 以一个因子为列
【发布时间】:2019-01-24 17:26:43
【问题描述】:

在下面的虚拟数据集中,我想创建一个汇总表,对三个变量进行分组。到目前为止,我使用了dplyr。 但是,我希望将 r 的值作为列名,将 x1 和 x2 值作为行名,并用来自 m 的值填充相应的单元格。 有什么解决办法?

r <- rep(seq(1,10,1),10)
x1 <- rbinom(100, 1, 0.5)
x2 <- rbinom(100, 2, 0.5)
y <- rnorm(100, 10, 5)

df <- data.frame(r,x1,x2,y)

library(dplyr)

View(df %>% 
  group_by(x1,x2,r) %>% 
  summarise(m = mean(y))
)

【问题讨论】:

  • 试试library(tidyverse);df %&gt;% group_by(r, x1, x2) %&gt;% summarise(m = mean(y)) %&gt;% spread(r, m) %&gt;% unite(x, x1, x2) %&gt;% column_to_rownames('x')

标签: r dplyr grouping summarization


【解决方案1】:

为了实现您想要的输出,您基本上必须使用 x1 和 x2 作为分组变量,从长格式转换为宽格式。函数 spread() 将完成这项工作:

library(dplyr)
library(tidyr)

df %>% 
  group_by(x1,x2,r) %>% 
  summarise(m = mean(y)) %>% 
  ungroup %>% 
  spread(key = r, value = m,-x1, -x2)

【讨论】:

  • 我在点差中遇到错误;我认为您不需要-x1,-x2。 ungroupselect 也不需要。试试df %&gt;% group_by(x1, x2, r) %&gt;% summarise(m = mean(y)) %&gt;% spread(r, m)
  • ungroup() 在您进行比单个 group_by 更多的操作时始终是一个好习惯,在这种情况下 select() 是可选的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2016-01-14
  • 1970-01-01
相关资源
最近更新 更多