#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)