R中多列的交叉表

Git*_*ine 3 pivot-table r dataframe

例如,我有一个名为 x 的数据集:

客户ID A C
1 1 0 0
2 0 1 1
3 0 0 1
4 1 1 1

然后我想创建另一个表,计算从 a 到 c 的每一列有 1 的次数,以及其他也有 1 的列的组合。

所以结果将是这个表:

A C
A 1 1 1
1 0 2
C 1 2 1

因此,第二个表的第一行将如下所示: 有多少次只有 a 列有 1?这只是一次。a 和 b 中有多少次都是 1?这只是一次。a 和 c 中有多少次都是 1?这种事只发生过一次。

我怎样才能在 R 中轻松地做到这一点?请注意,我只想关注列为 1 的情况。

Maë*_*aël 7

您可以使用它crossprod来构建非对角线条目。为了以后参考,这有时称为共现矩阵。

要创建对角线,有点棘手:找到总和为 1 的行并应用按列求和。

mat <- as.matrix(df[-1])
out <- crossprod(mat)  # Same as: t(mat) %*% mat
diag(out) <- colSums(mat[rowSums(mat) == 1, ])
out

#   a b c
# a 1 1 1
# b 1 0 2
# c 1 2 1
Run Code Online (Sandbox Code Playgroud)