R Фильтровать кадр данных по значениям в столбце списка типов. - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть фрейм данных, в котором есть столбец со списком.Я хочу отфильтровать DF на основе этого списка

id <- c(1,2,3)
type <- c("dog1|dog2","cat1|cat2","mouse1|mouse2")

df1 <- data.frame("id" = id,"type" = type)
str(df1)
df1$type <- strsplit(as.character(df1$type),"|", fixed = TRUE)
matchingL <- c("dog1","mouse2", "mouse1", "ant")

# this does not work
df1[unlist(df1$type) %in% matchingL,]

результат равен

     id       type
1     1 dog1, dog2
NA   NA       NULL
NA.1 NA       NULL

, в то время как я хочу, чтобы результат был

id       type
1       dog1
3       mouse1
3       mouse2

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете использовать ?unnest из пакета tidyr, чтобы создать длинный кадр данных с одной строкой для каждого значения в списке в type, а затем отфильтровать строки, используя %in%:

library(dplyr)
library(tidyr)

df2 <- df1 %>% 
  unnest(type) %>% 
  filter(type %in% matchingL)

df2
#>   id   type
#> 1  1   dog1
#> 2  3 mouse1
#> 3  3 mouse2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...