Сопоставлять столбцы и хранить все дублированные элементы в столбце фрейма данных [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