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 的情况。
您可以使用它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)