首页 > 解决方案 > 给定特定数据帧,如何减去矩阵中的两个值?

问题描述

我目前正在尝试制作一个可以预测团队得分的工具。本质上,我使用两个变量并减去它们对应的 r 值。这是我正在考虑的数据框。

在此处输入图像描述

每个 A:J 团队都有一个与之关联的“r 值”:

#       [,1]
#[1,] -0.870  8
#[2,] -0.750  7  
#[3,]  2.290  2
#[4,] -0.050  5
#[5,]  0.355  4
#[6,] -0.895  9
#[7,]  3.290  1 
#[8,] -0.510  6 
#[9,]  0.430  3
#[10,] -3.290 10

我为不够清晰道歉,但“r值”在第1列,第2列的值对应团队的字母(即A=1、B=2等)

参考数据框,我正在尝试执行以下操作:对于第一行,从 A 中减去 E。对于第二行,从 F 中减去 A,等等。

我希望这是有道理的。我最终不确定如何以最有效的方式解决这个问题。感谢您的帮助。

标签: rmatrix

解决方案


我们可以创建一个命名向量,然后使用它来匹配“AwayTeam”、“HomeTeam”的值并进行减法

nm1 <- setNames(m1[,1], LETTERS[m1[,2]])
Reduce(`-`, lapply(df1[c('AwayTeam', 'HomeTeam')], function(x) nm1[x]))

或者它只是

nm1[df1[['AwayTeam']]] - nm1[df1[['HomeTeam']]]

数据

m1 <- structure(c(-0.87, -0.75, 2.29, -0.05, 0.3555, -0.895, 3.29, 
-0.51, 0.43, -3.29, 8, 7, 2, 5, 4, 9, 1, 6, 3, 10), .Dim = c(10L, 
2L))

df1 <- structure(list(Week = c(3, 3, 4, 4, 5, 5), AwayTeam = c("E", 
"A", "H", "I", "F", "F"), HomeTeam = c("A", "F", "E", "A", "C", 
"J")), class = "data.frame", row.names = c(NA, -6L))

推荐阅读