R按列表类型列中的值筛选数据帧

R按列表类型列中的值筛选数据帧,r,dataframe,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

我有一个数据框,它有一个列,列中有列表。我想根据这个列表过滤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       dog1
3       mouse1
3       mouse2

您可以使用tidyr包中的
?unnest
,在
类型中为列表中的每个值创建一个长数据帧,其中一行对应一个值,然后使用%
中的
%筛选行:

库(dplyr)
图书馆(tidyr)
df2%
unnest(类型)%%>%
筛选器(类型%in%matchingL)
df2
#>id类型
#>1狗1
#>2 3鼠标1
#>3 3鼠标2

您可以使用tidyr软件包中的
?unest
创建一个长数据框,在
类型中为列表中的每个值创建一行,然后使用
%in%
过滤行:

库(dplyr)
图书馆(tidyr)
df2%
unnest(类型)%%>%
筛选器(类型%in%matchingL)
df2
#>id类型
#>1狗1
#>2 3鼠标1
#>3 3鼠标2

data.frame
语法要求在方括号内的
df1$type%in%matchingL
之后添加逗号。我已经修改了代码
数据。frame
语法要求您在%matchingL
中的
df1$type%之后添加逗号。我已经修改了代码
id       type
1       dog1
3       mouse1
3       mouse2