繁体   English   中英

如何根据列表列中的值对 dataframe 进行子集化

[英]How to subset a dataframe based on values in a list column

我遇到了一个问题,我从 API 中提取信息,并且特定列中有嵌套值。 我需要过滤这些值以返回我需要的信息。 这是一个例子:

library(dplyr)

# Make Data
problem <- list(list("thing 1", "thing 2"), list("thing 1", "thing 2", "thing 3"), list("thing 1"))
name <- list("joe", "sue", "nancy")

df<-data.frame(name=c("joe", "sue", "nancy"),problem=I(problem))

# How can I find subset rows where the problem column contains "thing 3"
filter(df, name == "sue") # this works fine
filter(df, "thing 3" %in% problem) # this doesn't

对我来说很明显,这是因为列表是嵌套的,并且 filter() 没有“看到”数据,但我不太清楚如何绕过它。 此外,我返回的数据相当大,并且列中的每个列表都有任意数量的项目,所以如果可以避免的话,我不想取消嵌套列。

#EDIT:我没有与 dplyr 解决方案结婚,事实上,如果有 data.table 解决方案,我会特别有兴趣听到它,但我对基础或其他什么都很好!

任何帮助,将不胜感激。

df %>%
  filter(map_lgl(problem, ~any('thing 3' == .x)))

  name      problem
1  sue thing 1,....
  • 我们可以尝试从Base R subset
subset(df , grepl("thing 3" , problem))

  • Output
  name      problem
2  sue thing 1,....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM