Сопоставлять столбцы и хранить все дублированные элементы в столбце фрейма данных [R]

У меня есть два кадра данных; DF1 имеет 3 столбца, а DF2 имеет один столбец. В DF1 есть все элементы, содержащиеся в DF2, но большинство из них дублируются, как показано ниже.

DF1=
***freetext***,         ***specific***,    ***ICDcode*** 

Jaundice,hepatitisA,B,C   Hepatitis A       B15
Jaundice,hepatitisA,B,C   Hepatitis B       B16
Jaundice,hepatitisA,B,C   Hepatitis C       B17.1
Jaundice,hepatitisA,B,C   Jaundice          R17
lobar Pneumonia           Lobar pneumonia   J18.1
Lobar Pneumonia ,scabies  Lobar pneumonia   J18.1
scabiess                  scabies            G10     

DF2=          
Jaundice,hepatitisA,B,C  
scabiess                            
Lobar Pneumonia ,scabies
lobar Pneumonia

Я хочу иметь соответствие между двумя фреймами данных таким образом, чтобы при каждом совпадении должен быть результирующий фрейм данных, принимающий форму DF1. Например, желтуха, гепатит A,B,C должны появляться 4 раза вместо того, чтобы появляться один раз в колонка. Другими словами, дубликаты должны быть сохранены, как показано ниже;

Resultant data frame should appear like this.

    column1                  column2             column3
Jaundice,hepatitisA,B,C   Hepatitis A       B15
Jaundice,hepatitisA,B,C   Hepatitis B       B16
Jaundice,hepatitisA,B,C   Hepatitis C       B17.1
Jaundice,hepatitisA,B,C   Jaundice          R17

Итак, как я должен пройти через DF2, чтобы найти совпадение в DF1(первый столбец), а затем создать кадр данных совпадений со всеми другими соответствующими строками, как показано выше?

вот мой сценарий, но он не дает желаемых результатов

   newMatches<- data.frame()
for(i 1:nrow(DF1){ for(j in 1:nrow(DF2[,1]{grep(j, i, ignore.case=F, value=T)->newMatches}} 
#it doesn't produce other columns of DF1

любая помощь и / или предложение могут быть очень высоко оценены. Я немного новичок в R

1 ответ

Насколько я понимаю, вы хотите отфильтровать строки DF1, оставив только те, для которых в DF2 существует первый столбец. Это правильно? Самый простой способ добиться этого будет

DF1[DF1[, 1] %in% DF2[, 1], ]

редактировать

Вот полный код для воспроизведения примера:

DF1 <- structure(list(
    freetext = structure(c(1L, 1L, 1L, 1L, 2L, 3L, 4L),
        .Label = c("Jaundice,hepatitisA,B,C", "lobar Pneumonia", 
        "Lobar Pneumonia ,scabies", "scabiess"), class = "factor"),
    specific = structure(c(1L, 2L, 3L, 4L, 5L, 5L, 6L),  
        .Label = c("Hepatitis A", "Hepatitis B", "Hepatitis C", "Jaundice",
        "Lobar pneumonia", "scabies"), class = "factor"), 
    ICDcode = structure(c(1L, 2L, 3L, 6L, 5L, 5L, 4L), 
        .Label = c("B15", "B16", "B17.1", "G10", "J18.1", "R17"),
        class = "factor")),
   .Names = c("freetext", "specific", "ICDcode"),
   row.names = c(NA, -7L), class = "data.frame")

DF2 <- structure(list(
    freetext = structure(c(1L, 4L, 3L, 2L), 
        .Label = c("Jaundice,hepatitisA,B,C", 
         "lobar Pneumonia", "Lobar Pneumonia ,scabies", "scabiess"),
         class = "factor")),
    .Names = "freetext", row.names = c(NA, -4L), class = "data.frame")

result <- DF1[DF1[, 1] %in% DF2[, 1], ]

печать result дает следующий вывод

                  freetext        specific ICDcode
1  Jaundice,hepatitisA,B,C     Hepatitis A     B15
2  Jaundice,hepatitisA,B,C     Hepatitis B     B16
3  Jaundice,hepatitisA,B,C     Hepatitis C   B17.1
4  Jaundice,hepatitisA,B,C        Jaundice     R17
5          lobar Pneumonia Lobar pneumonia   J18.1
6 Lobar Pneumonia ,scabies Lobar pneumonia   J18.1
7                 scabiess         scabies     G10
Другие вопросы по тегам