如何使用 dplyr 创建交叉表(带有示例)


您可以使用以下基本语法,使用 R 中dplyrTidyr包中的函数来生成交叉表:

 df %>%
  group_by (var1, v ar2) %>%
  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'),
                 dots=c(7, 7, 8, 11, 13, 15, 19, 13))

#view data frame
df

  team position points
1 AG 7
2 AG 7
3AF 8
4 AC 11
5 BG 13
6 BF 15
7 BF 19
8 BC 13

我们可以使用以下语法为“团队”和“位置”变量创建交叉表:

 library (dplyr)
library (tidyr)

#produce crosstab
df %>%
group_by (team, position) %>%
tally () %>%
spread (team, n)

# A tibble: 3 x 3
  position AB
1 C 1 1
2 F 1 2
3 G 2 1

以下是解释交叉表值的方法:

  • 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
df %>%
group_by (team, position) %>%
tally () %>%
spread (position, n)

# A tibble: 2 x 4
# Groups: team [2]
  team CFG
1 A 1 1 2
2 B 1 2 1

相关:如何使用 Tidyr 中的 Spread 功能

其他资源

以下教程解释了如何在 dplyr 中执行其他常用功能:

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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注