在列中使用 grouped_by 变量汇总交叉 table 中的数据
summarizing data in cross-table with grouped_by variable in columns
我正在尝试汇总两个变量的数据,汇总的输出非常多(至少在 table 跨越多页的 r 笔记本输出中)。我想要一个变量作为汇总输出的行,另一个作为列,然后在实际的 table 中,行和列数据的每种组合的均值
一些示例数据:
dat1 <- data.frame(
category = rep(c("catA", "catB", "catC"), each=4),
age = sample(1:2,size=4,replace=T),
value = rnorm(12)
)
然后我通常会得到这样的摘要数据框:
dat1 %>% group_by(category,age)%>% summarize(mean(value))
看起来像这样:
但我的实际数据每个变量都有 10 多个级别,所以 table 很长且难以阅读。
我更喜欢这样的东西,我使用以下方法创建的:
dat1 %>% group_by(category)
%>% summarize(mean.age1 =mean(value[age==1]),
mean.age2 =mean(value[age==2]))
一定有比手工编码方式列更好的方法吧?
你只需要使用 tidyr
除了做这样的事情:
library(dplyr)
library(tidyr)
dat1 %>%
group_by(category, age) %>%
summarise(mean = mean(value)) %>%
spread(age, mean, sep = '')
输出如下:
Source: local data frame [3 x 3]
Groups: category [3]
category age1 age2
* <fctr> <dbl> <dbl>
1 catA 0.2930104 0.3861381
2 catB 0.5752186 0.1454201
3 catC 1.0845645 0.3117227
我正在尝试汇总两个变量的数据,汇总的输出非常多(至少在 table 跨越多页的 r 笔记本输出中)。我想要一个变量作为汇总输出的行,另一个作为列,然后在实际的 table 中,行和列数据的每种组合的均值 一些示例数据:
dat1 <- data.frame(
category = rep(c("catA", "catB", "catC"), each=4),
age = sample(1:2,size=4,replace=T),
value = rnorm(12)
)
然后我通常会得到这样的摘要数据框:
dat1 %>% group_by(category,age)%>% summarize(mean(value))
看起来像这样:
但我的实际数据每个变量都有 10 多个级别,所以 table 很长且难以阅读。 我更喜欢这样的东西,我使用以下方法创建的:
dat1 %>% group_by(category)
%>% summarize(mean.age1 =mean(value[age==1]),
mean.age2 =mean(value[age==2]))
一定有比手工编码方式列更好的方法吧?
你只需要使用 tidyr
除了做这样的事情:
library(dplyr)
library(tidyr)
dat1 %>%
group_by(category, age) %>%
summarise(mean = mean(value)) %>%
spread(age, mean, sep = '')
输出如下:
Source: local data frame [3 x 3]
Groups: category [3]
category age1 age2
* <fctr> <dbl> <dbl>
1 catA 0.2930104 0.3861381
2 catB 0.5752186 0.1454201
3 catC 1.0845645 0.3117227