我有一个数据框,其中有一个包含列表的列。我想根据该列表过滤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
答案 0 :(得分:1)
您可以使用tidyr软件包中的?unnest
为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