Фильтрация в Tidyverse на основе вектора / списка возможных значений - PullRequest
1 голос
/ 07 октября 2019

Я хотел бы выбрать строки фрейма данных на основе условий в двух столбцах, которые должны идентифицировать уникальную строку. В приведенном ниже конкретном примере я хотел бы выбрать id=1,2,3... с конкретным значением mtry, указанным в векторе, т. Е. Для id = 1 мне просто нужна первая строка с mtry=3, для id=2 мне бы хотелось mtry=5.

Я пытался использовать group_by и filter, например,

filter(df, (mtry,id) %in% c([3,1],[5,2],[3,3]))

, но это выдает ошибку

Ошибка: неожиданно ',' в.

Каким образом это происходит?

enter image description here

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Вы можете сделать этот вид фильтра с внутренним соединением

library(dplyr)

df %>% 
  inner_join(tibble(mtry = c(3, 5, 3), id = c(1, 2, 3)))

Пример:

set.seed(100)
df <- data.frame(mtry = sample(1:3, 100, T), id = sample(1:5, 100, T))

df %>% 
  inner_join(tibble(mtry = c(3, 5, 3), id = c(1, 2, 3)))
# Joining, by = c("mtry", "id")
#    mtry id
# 1     3  1
# 2     3  3
# 3     3  3
# 4     3  3
# 5     3  1
# 6     3  3
# 7     3  1
# 8     3  1
# 9     3  1
# 10    3  3
# 11    3  1
# 12    3  3
# 13    3  1
0 голосов
/ 07 октября 2019

Вам необходимо создать различные условия для каждой комбинации

subset(df, (mtry == 3 & id == 1) | (mtry == 5 & id == 2) | (mtry == 3 & id == 3))

Или, если хотите, tidyverse, введите условия в filter

library(dplyr)

df %>% filter((mtry == 3 & id == 1) | (mtry == 5 & id == 2) | (mtry == 3 & id == 3))

Вы можете объединить условие 1 и3 до

df %>% filter((mtry == 3 & id %in% c(1, 3)) | (mtry == 5 & id == 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...