R按类型列表列中的值过滤数据框

时间:2019-02-12 00:02:31

标签: r dataframe

我有一个数据框,其中有一个包含列表的列。我想根据该列表过滤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 :(得分:1)

您可以使用tidyr软件包中的?unnesttype中的列表中的每个值制作一个长数据帧,其中每个行都有一行,然后使用%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
相关问题