如何使用dplyr创建Crosstab(附实例)

141 阅读1分钟

你可以使用下面的基本语法,使用R中dplyrtidyr包中的函数生成一个交叉表:

df %>%
  group_by(var1, var2) %>%
  tally() %>%
  spread(var1, n)

下面的例子展示了如何在实践中使用这种语法。

例1:创建基本交叉表

假设我们在R中拥有以下数据框:

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 position=c('G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'),
                 points=c(7, 7, 8, 11, 13, 15, 19, 13))

#view data frame
df

  team position points
1    A        G      7
2    A        G      7
3    A        F      8
4    A        C     11
5    B        G     13
6    B        F     15
7    B        F     19
8    B        C     13

我们可以使用下面的语法来为 "球队 "和 "位置 "这两个变量创建一个交叉表:

library(dplyr)
library(tidyr)

#produce crosstab 

下面是如何解释交叉表中的数值:

  • 1名球员的位置是 "C",属于 "A "队。
  • 1名球员的位置是 "C",属于 "B "队。
  • 1名球员的位置是 "F",属于 "A "队。
  • 2名球员的位置是 "F",属于 "B "队。
  • 2名球员的位置是 "G",属于 "A "队。
  • 1名球员的位置是 "G",属于 "B "队。

注意,我们可以通过切换**spread()**函数中使用的变量来切换交叉表的行和列:

library(dplyr)
library(tidyr)

#produce crosstab with 'position' along columns

相关的:如何在tidyr中使用Spread函数

其他资源

下面的教程解释了如何在dplyr中执行其他常用函数:

如何使用dplyr计算相对频率
如何使用dplyr按索引选择列
如何使用dplyr删除行