Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preserve the row and column names in the input matrix #41

Open
msunij opened this issue Jun 20, 2021 · 2 comments
Open

Preserve the row and column names in the input matrix #41

msunij opened this issue Jun 20, 2021 · 2 comments

Comments

@msunij
Copy link

msunij commented Jun 20, 2021

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?

@jtilly
Copy link
Owner

jtilly commented Jun 20, 2021

This sounds reasonable in general.

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

@msunij
Copy link
Author

msunij commented Jun 21, 2021

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  

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants