Как создать таблицу со строками из первой таблицы, которая также соответствует 3 столбцам в строке второй таблицы в R - PullRequest
1 голос
/ 26 апреля 2020

Мне нужно создать третью таблицу (df3) со строками первой таблицы (df1), которые соответствуют значениям строк трех из 5 столбцов во второй таблице (df2). Две начальные таблицы df1 и df2 не имеют одинакового количества строк.

Пример:

              df1                                                  df2 
chain   freq   color  length  type1  type2       chain   freq    color  length  type1  type2
AC       24     red    100      C      V2         BD      45      blue   73      C      G5
BD       57     green   87      C      G5         YJ      57      green  78      N      Y6
OP       83     yellow  68      R      Q9         TP       8      orange 98      Y      P2
TP       28     blue    74      Y      P2         HP      50      white  87      A      U9
HP       23     yellow  39      A      U9         ZS      87      red    98      P      N8
                                                  XC       8      green  98      T      N8

В результирующей таблице есть строки в df1, соответствующие столбцам chain , type1 и type2 в df2. В этом примере это будет выглядеть так:

          df3                                
chain   freq    color  length  type1  type2
BD       57     green   87      C      G5
TP       28     blue    74      Y      P2
HP       23     yellow  39      A      U9

Я пытаюсь сделать это, избегая как можно больше циклов. Я просматривал функции dplyr, но пока не совсем знаком с пакетом. Любые мысли приветствуются.

1 Ответ

1 голос
/ 26 апреля 2020

Мы могли бы использовать semi_join

library(dplyr)
semi_join(df1, df2, by = c('chain', 'type1', 'type2'))
#   chain freq  color length type1 type2
#1    BD   57  green     87     C    G5
#2    TP   28   blue     74     Y    P2
#3    HP   23 yellow     39     A    U9

данные

df1 <- structure(list(chain = c("AC", "BD", "OP", "TP", "HP"), freq = c(24L, 
57L, 83L, 28L, 23L), color = c("red", "green", "yellow", "blue", 
"yellow"), length = c(100L, 87L, 68L, 74L, 39L), type1 = c("C", 
"C", "R", "Y", "A"), type2 = c("V2", "G5", "Q9", "P2", "U9")), class = "data.frame", row.names = c(NA, 
-5L))

df2 <- structure(list(chain = c("BD", "YJ", "TP", "HP", "ZS", "XC"), 
    freq = c(45L, 57L, 8L, 50L, 87L, 8L), color = c("blue", "green", 
    "orange", "white", "red", "green"), length = c(73L, 78L, 
    98L, 87L, 98L, 98L), type1 = c("C", "N", "Y", "A", "P", "T"
    ), type2 = c("G5", "Y6", "P2", "U9", "N8", "N8")), 
    class = "data.frame", row.names = c(NA, 
-6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...