Не удается передать список в фильтр dplyr с использованием %in%

#r #filter #dplyr

#r #Фильтр #dplyr

Вопрос:

Я не могу передать список в filter() функцию dplyr, используя %in% , и я не знаю, почему он не работает.

Я воссоздал проблему ниже:
У меня есть два набора данных, x и y .

x является набором идентификаторов источника ( O_ID ) и идентификаторов назначения ( D_ID ).
Один O_ID вход x может быть связан с несколькими D_ID's .

y представляет собой набор коэффициентов для D_IDs .

Я хочу взять все D_IDs , связанные с конкретным O_ID , и получить таблицу коэффициентов, связанную с этим D_ID. В приведенном ниже примере это означает, что я хочу вернуть набор y только со строками для gt и st .

Пример кода

 library(tidyverse)

# setup sample x dataframe
x <- data.frame("O_ID" = c("A1","A1","A2","B1","B1","B2"),
                "D_ID" = c("gt","st","hy","kl","st","nu"))
# setup sample y dataframe
y <- data.frame("ID" = c("gt","st","hy"),
                "coef_1" = c(2.6,1.8,6.7),
                "coef_2" = c(5.6,2.1,3.6))

# get D_ID's associated with O_ID == "A1"
x_A1 <- x %>%
          filter(O_ID == "A1") %>%
          select(D_ID) %>%
          as.list()

# FAILED STEP:
# get table of coefficients for D_IDs
y_A1 <- y %>%
          filter(ID %in% x_A1)
  

Почему мой последний шаг не работает? Является ли список правильным форматом для передачи информации?

Ответ №1:

Вам нужно pull вместо as.list() , потому что вы хотите фильтровать по a vector вместо a list :

 # get D_ID's associated with O_ID == "A1"
x_A1 <- x %>%
  filter(O_ID == "A1") %>%
  select(D_ID) %>%
  pull()

# get table of coefficients for D_IDs
y_A1 <- y %>%
  filter(ID %in% x_A1)