matchingR icon indicating copy to clipboard operation
matchingR copied to clipboard

Preserve the row and column names in the input matrix

Open msunij opened this issue 4 years ago • 2 comments

The output from the algorithm doesn't preserve the row and column names associated with the input matrices, can you please add an option to keep them?

msunij avatar Jun 20 '21 12:06 msunij

This sounds reasonable in general.

Could you provide a concrete example with the desired output, please?

jtilly avatar Jun 20 '21 14:06 jtilly

Since we're relying more and more on tidyverse let me show an example beginning with a tibble.

library(tidyverse)
library(matchingR)

set.seed(100)

pref <- expand_grid(college = LETTERS[1:5],
                    student = letters[1:7]) %>% 
  mutate(college_score = round(rnorm(nrow(.)), 2),
         student_score = round(rnorm(nrow(.)), 2))

college_score <- pref %>% 
  select(-student_score) %>% 
  pivot_wider(names_from = college, values_from = college_score) %>% 
  column_to_rownames(var = "student") %>% 
  as.matrix()

student_score <- pref %>% 
  select(-college_score) %>% 
  pivot_wider(names_from = student, values_from = student_score) %>% 
  column_to_rownames(var = "college") %>% 
  as.matrix()

matched <- galeShapley.collegeAdmissions(studentUtils = student_score,
                                         collegeUtils = college_score,
                                         slots = 2)

The input matrices looks like the following

> college_score
      A     B     C     D     E
a  1.66  0.38  0.17  1.02 -0.64
b  0.28  1.08 -0.44 -1.88  0.49
c  1.21 -0.21 -1.66 -0.56 -0.32
d -1.16  0.15  0.43 -0.51  0.35
e -0.39  0.13  0.77  0.57  1.16
f -1.03  1.28  0.01  1.94 -0.32
g  0.06  2.67 -1.48 -1.22  0.44
> student_score
      a     b     c     d     e     f     g
A  1.12  1.40  0.74 -1.76  0.72  1.56 -0.88
B -1.42 -0.68  1.99  1.29  0.67 -1.57 -1.23
C  0.25 -0.13 -0.06 -0.93 -0.49 -0.04  1.27
D -0.36  0.37  1.54  1.71 -0.26 -0.50  2.15
E -0.54 -1.18 -0.02 -0.24 -0.43 -0.25  1.66

Now the output from the matching algorithm looks like the following

> matched$matched.colleges
     [,1] [,2]
[1,]    7   NA
[2,]    4    6
[3,]    5   NA
[4,]    3    2
[5,]    1   NA

As you can see it doesn't use the rownames or colnames attached to the input matrices. The desired output would be something like this

> matched$matched.colleges
  slot_1 slot_2
A "g"    NA    
B "d"    "f"   
C "e"    NA    
D "c"    "b"   
E "a"    NA  

msunij avatar Jun 21 '21 18:06 msunij