我有这个清单
Mylist <- c("orange", "apple", "cherry")
而这个数据框
df<- data.frame(id = c(1,2,3), value = c("orange, peach, apple", "pineapple, mandarine, coconut", "cherry, peach"))
我希望选择值包含列表中一定数量元素的行。
在此示例中,我希望看到至少包含至少0个元素(至少1个)的行。但是,0可以是可变的。
所以,我的理想输出是
id value
1 orange, peach, apple
3 cherry, peach
我试过了,但是没有给我正确的结果。
df[sapply(strsplit(as.character(df$value), ","), function(x)
(x %in% Mylist)) > 0,];
如果有人建议我上述代码有什么问题,我将不胜感激。
我们可以通过使用'mylist'的元素创建一个pattern
,paste
并使用'grep'检查它是否存在于'value'列中,并基于该子集对数据集对象进行子集化
df[grepl(paste0("\\b(", paste(tolower(Mylist), collapse="|"), ")\\b"), tolower(df$value)),]
# id value
#1 1 orange, peach, apple
#3 3 cherry, peach
如果我们根据数量需要它,那么
library(stringr)
df[Reduce(`+`, lapply(Mylist, str_count, string = df$value)) > 1,]
# id value
#1 1 orange, peach, apple
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句