Как объединить 2 фрейма данных с 4 столбцами в каждом в матрицу, где каждая ячейка возвращает пересечение

У меня есть 2 набора данных, и я хочу сравнить каждый столбец между двумя наборами данных и получить их пересечения. как мне это сделать? У меня есть пример ниже, чтобы лучше объяснить, что я хочу получить обратно. Я работаю с Rstudio.

dt1 =

col1 col2 col3 col4 col5 col6
dog rabbit bird pig dog bird
cat turtle cat rabbit rabbit dog
pig bird dog turtle turtle pig

dt2=

col1 col2 col3 col4 col5 col6
rabbit dog lion turtle fish bird
giraffe bird cat dog worm dog
pig cat pig rabbit dog pig

матрица ожидаемого дохода =

col1 col2 col3 col4 col5 col6
intersect(dt1col1,dt2col1) intersect(dt1col1,dt2col2) intersect(dt1col1,dt2col3) intersect(dt1col1,dt2col4) intersect(dt1col1,dt2col5) intersect(dt1col1,dt2col6)
intersect(dt1col2,dt2col1) intersect(dt1col2,dt2col2) intersect(dt1col2,dt2col3) intersect(dt1col2,dt2col4) intersect(dt1col2,dt2col5) intersect(dt1col2,dt2col6)
intersect(dt1col3,dt2col1) intersect(dt1col3,dt2col2) intersect(dt1col3,dt2col3) intersect(dt1col3,dt2col4) intersect(dt1col3,dt2col5) intersect(dt1col3,dt2col6)
intersect(dt1col4,dt2col1) intersect(dt1col4,dt2col2) intersect(dt1col4,dt2col3) intersect(dt1col4,dt2col4) intersect(dt1col4,dt2col5) intersect(dt1col4,dt2col6)
intersect(dt1col5,dt2col1) intersect(dt1col5,dt2col2) intersect(dt1col5,dt2col3) intersect(dt1col5,dt2col4) intersect(dt1col5,dt2col5) intersect(dt1col5,dt2col6)
intersect(dt1col6,dt2col1) intersect(dt1col6,dt2col2) intersect(dt1col6,dt2col3) intersect(dt1col6,dt2col4) intersect(dt1col6,dt2col5) intersect(dt1col6,dt2col6)

person Amirul Hakim    schedule 18.03.2021    source источник


Ответы (1)


Попробуйте outer

> outer(dt1, dt2, FUN = Vectorize(function(x, y) toString(intersect(x, y))))
     col1          col2             col3       col4                  col5 
col1 "pig"         "dog, cat"       "cat, pig" "dog"                 "dog"
col2 "rabbit"      "bird"           ""         "rabbit, turtle"      ""
col3 ""            "bird, cat, dog" "cat"      "dog"                 "dog"
col4 "pig, rabbit" ""               "pig"      "rabbit, turtle"      ""
col5 "rabbit"      "dog"            ""         "dog, rabbit, turtle" "dog"
col6 "pig"         "bird, dog"      "pig"      "dog"                 "dog"
     col6
col1 "dog, pig"
col2 "bird"
col3 "bird, dog"
col4 "pig"
col5 "dog"
col6 "bird, dog, pig"
person ThomasIsCoding    schedule 18.03.2021
comment
Если бы я хотел, чтобы он отображал количество пересекаемых элементов, а не список элементов. как я могу отредактировать код, который вы сделали? - person Amirul Hakim; 18.03.2021
comment
@Amirul Hakim использует length вместо toString - person ThomasIsCoding; 18.03.2021