фильтрация тиббла на основе значений во втором тиббле - PullRequest
0 голосов
/ 06 мая 2020

Учитывая следующие таблицы:

df1<- tibble(A = c(1:10), B=sample(c(21:30)))
df2<-tibble(A = c(1,2,4,6,7))

Я хочу создать df3, содержащий все строки, в которых df1 $ A находится в df2 $ A. Я пробовал

df3<- df1 %>% filter(A == df2%A))

, но он возвращает только 2 строки, потому что он соответствует строкам, а не ищет значения. Мой реальный набор данных - несколько тысяч строк.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 06 мая 2020
library(tidyverse)
df1<- tibble(A = c(1:10), B=sample(c(21:30)))
df2<-tibble(A = c(1,2,4,6,7))
df1 %>% 
  filter(df1$A %in% df2$A)
0 голосов
/ 06 мая 2020

Правильный способ сделать это - использовать semi_join()

Например,

library(tidyverse)
set.seed(123)
df1 <- tibble(A = c(1:10), B = sample(c(21:30)))
df2 <- tibble(A = c(1, 2, 4, 6, 7))

df3 <- semi_join(df1, df2, by = "A")
df3
#> # A tibble: 5 x 2
#>       A     B
#>   <int> <int>
#> 1     1    23
#> 2     2    30
#> 3     4    28
#> 4     6    29
#> 5     7    21

Создано 06.05.2020 пользователем пакет REPEX (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...