Поместите строки в элементы списка на основе соответствия 2 столбцам - PullRequest
1 голос
/ 23 апреля 2019

Мне нужно, чтобы мой фрейм данных был помещен в элементы списка, чтобы каждый потенциальный человек находился в «корзине» на основе 2 столбцов ID и ID2_value . Затем я выполню валидацию пользователя вручную, чтобы подтвердить то же лицо или нет.

несколько строк с одним и тем же ID2_value - это потенциально один и тот же человек - их нужно соединить. несколько строк с одинаковым ID определенно один и тот же человек.

fname_c1   ID         ID2    ID2_value   by    bm    bd   
  <fct>   <fct>      <fct>    <fct>     <int> <int> <int> 
1 STEFAN   100       MEDICAL#1  60        1957     9     2    
2 HANS     205       MEDICAL#1  60        1957     6     7    
3 PODRICK  104       MEDICAL#2  5003      1933     6     7   
4 BOB      600       MEDICAL#2  2005      1960     9     2    
5 PODRICK  104       MEDICAL#1  89        1933     9     2   
6 STEFAN   100       MEDICAL#2  1001      1957     6     1  
7 GARY     104       MEDICAL#4  AAB       1933     6     1    
8 GARY     110       MEDICAL#4  AAB       1933     6     1  

Исходя из приведенных выше данных, строки, которые следует объединить, равны

fname_c1   ID         ID2    ID2_value   by    bm    bd 
  <fct>   <fct>      <fct>    <fct>     <int> <int> <int>  
1 STEFAN   100       MEDICAL#1  60        1957     9     2   
2 HANS     205       MEDICAL#1  60        1957     6     7   
3 STEFAN   100       MEDICAL#2  1001      1957     6     1   

fname_c1   ID         ID2    ID2_value   by    bm    bd   
4 BOB      600       MEDICAL#2  2005      1960     9     2   

fname_c1   ID         ID2    ID2_value   by    bm    bd   
5 PODRICK  104       MEDICAL#1  89        1933     9     2  
6 PODRICK  104       MEDICAL#2  5003      1933     6     7  
7 GARY     104       MEDICAL#4  AAB       1933     6     1  
8 GARY     110       MEDICAL#4  AAB       1933     6     1   

Мне трудно думать о том, как сделать это двойное соответствие.

Воспроизводимый код

dat <- structure(list(fname_c1 = structure(c(5L, 3L, 4L, 1L, 4L, 5L, 2L, 2L), 
                                           .Label = c("BOB", "GARY", "HANS", "PODRICK", "STEFAN"), 
                                           class = "factor"), 
                      ID = structure(c(1L, 4L, 2L, 5L, 2L, 1L, 2L, 3L), 
                                     .Label = c("100", "104", "110", "205", "600"), 
                                     class = "factor"), 
                      ID2 = structure(c(1L, 1L, 2L, 2L, 1L, 2L, 3L, 3L), 
                                      .Label = c("MEDICAL#1", "MEDICAL#2", "MEDICAL#4"), 
                                      class = "factor"), 
                      ID2_value = structure(c(4L, 4L, 3L, 2L, 5L, 1L, 6L, 6L), 
                                            .Label = c("1001", "2005", "5003", "60", "89", "AAB"), 
                                            class = "factor"), 
                      by = c(1957L, 1957L, 1933L, 1960L, 1933L, 1957L, 1933L, 1933L), 
                      bm = c(9L, 6L, 6L, 9L, 9L, 6L, 6L, 6L), 
                      bd = c(2L, 7L, 7L, 2L, 2L, 1L, 1L, 
                             "data.frame")
                      )
                 )

dat <- data.frame(dat)
library(tidyverse)

Нижеследующее соответствует обоим и сохраняет только «пересечение»

batches_all <- dat %>% 
  group_split(fname_c1, ID2_value)

Я ищу объединение обоих матчей.

...