Как отфильтровать по элементам декартового произведения столбцов в R с помощью dplyr? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть data.frame, где

df = data.frame(a = c(1,1,1,2,2,2),b = c(1,2,1,2,1,2), c = c(1,2,3,4,5,6))

Я хочу сохранить строки, соответствующие ключу. Например,

key = data.frame(a = c(1,2), b = c(1,2))

В этом случае я хочу удалить строки, не содержащие (a = 1 и b = 1) или (a = 2 и b = 2). В общем случае значения пар a и b не совпадают, и может быть больше совпадающих столбцов, чем только два. Важной частью является сохранение только тех строк, которые находятся в ключе. Полученный data.frame должен выглядеть как

df_result = data.frame(a = c(1,1,2,2), b = c(1,1,2,2), c = c(1,3,4,6))

Я могу только придумать не элегантный подход с циклами и, если функции, и не так обобщен, как мне нужно (указано выше).

nomatch = numeric(0)
for(i in 1:nrow(df)){
   if((df$a[i] != key$a[1] | df$b[i] != key$b[1]) & (df$a[i] != key$a[2] | df$b[i] != key$b[2]))
       nomatch = c(nomatch,i)
}

df_result2 = df[-nomatch,]

Я бы предпочел сделать это в dplyr.

1 Ответ

1 голос
/ 25 апреля 2019

Это внутреннее соединение df и key

library(dplyr)

df %>% 
  inner_join(key)

#   a b c
# 1 1 1 1
# 2 1 1 3
# 3 2 2 4
# 4 2 2 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...