首页 > 解决方案 > 使用两个数据框列的平均值生成交叉表

问题描述

我有两个数据框,一个名为“students.short”,由以下方式生成:

students.short <- data.frame(shoesize=c(38,39,38,38,39,38,37,36),
 population=c("kuopio","kuopio","kuopio","tampere",
 "tampere","tampere","tampere","tampere"))

students.short

  shoesize population
1       38     kuopio
2       39     kuopio
3       38     kuopio
4       38     kuopio
5       39    tampere
6       38    tampere
7       37    tampere
8       36    tampere

另一个叫做“students.tall”:

students.tall <- data.frame(shoesize=c(44,42,43,43,42,44,43,43),
 population=c("kuopio","kuopio","kuopio","kuopio",
 "tampere","tampere","tampere","tampere"))

students.tall

  shoesize population
1       44     kuopio
2       42     kuopio
3       43     kuopio
4       43     kuopio
5       42    tampere
6       44    tampere
7       43    tampere
8       43    tampere

我需要在人口(kuopio 或 tampere)和每个数据框的鞋码大小之间创建一个交叉表,例如

                       kuopio   tampere

studenst.short          38.3       37.6

studenst.tall             43         43

我找不到一个干净或简单的方法来做到这一点,有什么想法或帮助吗?

标签: rcrosstab

解决方案


这是一个dplyr驱动的答案。我们基本上首先使用.id参数绑定两个数据帧以区分数据帧。然后我们group_byand.idpopulation计算平均值,即

library(dplyr)

bind_rows(df1, df2, .id = 'group') %>% 
       group_by(group, population) %>% 
       summarise(new = mean(shoesize))

这使,

# A tibble: 4 x 3
# Groups:   group [?]
  group population   new
  <chr> <fct>      <dbl>
1 1     kuopio      38.3
2 1     tampere     37.6
3 2     kuopio      43  
4 2     tampere     43

推荐阅读