r - 求 R 中行对的总和

标签 r dplyr sum tidyverse

我有一个包含测试结果的数据框(行是玩家;列 Q1 ... Q6 是不同的问题)。现在我想找出哪对玩家的总得分最高:

# Generating sample data.
n = 6

set.seed(1986)

results_df = data.frame(Player = c("A", "B", "C", "D", "E", "F"), 
                     Q1 = sample(0:1, size = n, replace = TRUE), 
                     Q2 = sample(0:1, size = n, replace = TRUE),
                     Q3 = sample(0:1, size = n, replace = TRUE),
                     Q4 = sample(0:1, size = n, replace = TRUE),
                     Q5 = sample(0:1, size = n, replace = TRUE),
                     Q6 = sample(0:1, size = n , replace = TRUE))


head(results_df)

  Player Q1 Q2 Q3 Q4 Q5 Q6
1      A  1  0  1  0  0  0
2      B  1  1  0  0  0  0
3      C  0  1  0  1  0  1
4      D  0  1  1  0  1  1
5      E  1  1  1  1  1  1
6      F  1  0  0  1  0  1

1 和 0 是虚拟的,表示每个玩家的问题是正确 (1) 还是错误 (0)。现在我想将每对球员组合起来,看看他们作为一对球员会做得如何。

有谁知道如何将上面的数据框转换为如下所示的内容?

(这里我只是手工总结了每个对的组合:A 有 3 个对的题,再加上 B 有 3 题对而 A 错的题,将得到 6 个组合,依此类推...)

  Player  A  B  C  D  E  F
1      A  2  3  5  5  6  4
2      B  3  2  4  5  6  4
3      C  5  4  3  5  6  4
4      D  5  5  5  4  6  6
5      E  6  6  6  6  6  6
6      F  4  4  4  6  6  3

最佳答案

带有外部的基本R选项

> lst <- asplit(`row.names<-`(as.matrix(results_df[-1]), results_df$Player), 1)

> outer(lst, lst, FUN = Vectorize(function(x, y) sum(x + y > 0)))
  A B C D E F
A 2 3 5 5 6 4
B 3 2 4 5 6 4
C 5 4 3 5 6 4
D 5 5 5 4 6 6
E 6 6 6 6 6 6
F 4 4 4 6 6 3

关于r - 求 R 中行对的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70987898/

相关文章:

r - 如何在R中找出每个月有多少个交易日?

R 核心转储或崩溃 session 或在执行 mutate_each scale 时中止

R:使用 dplyr 按行对一系列列求和

r - 将 mutate_at 与 contains 结合使用以在多列上应用函数

mysql - 将文本文件加载到数据库中合并重复项

mysql - 使用 GROUP CONCAT 和 LEFT JOIN 计算行的总和

r - 计算因子变量的计数总和,作为 R 中数据帧的子集

r - 如何在 R 中创建包含空元素的配对列表?

r - R中两个3D点之间的距离

r - 在指定 x 和 mu 时对 df 的多行执行 t 检验并将结果附加为一列