var1是一个列表:
var1 <- list(c("tall tree", "fruits", "star"),
c("tree tall", "pine tree", "tree pine", "black forest", "water"),
c("apple", "orange", "grapes"),
c("ancient pine tree", "all trees"))
Run Code Online (Sandbox Code Playgroud)
我需要从包含术语"pine"的列表中完全删除这些元素.
想要的答案是一个清单:
[[1]]
[1] "tall tree" "fruits" "star"
[[2]]
[1] "apple" "orange" "grapes"
Run Code Online (Sandbox Code Playgroud)
谢谢
Dav*_*urg 13
你可以试试Filter这里
Filter(function(x) !any(grepl("pine", x)), var1)
# [[1]]
# [1] "tall tree" "fruits" "star"
#
# [[2]]
# [1] "apple" "orange" "grapes"
Run Code Online (Sandbox Code Playgroud)
var1[lapply(var1,function(x) length(grep("pine",x,value=FALSE))) == 0]
Run Code Online (Sandbox Code Playgroud)
小智 6
这是一个老问题,但我想我会添加另一个选项。stringr 包中的“str_”函数非常适合列表中的模式匹配。
如果您正在寻找匹配的所有列表条目,您可以使用:
library(stringr)
str_subset(var1,pattern="pine")
Run Code Online (Sandbox Code Playgroud)
但由于您想要不匹配的列表条目,您可以使用:
library(stringr)
var1[!str_detect(var1,pattern="pine")]
Run Code Online (Sandbox Code Playgroud)
str_detect(list,pattern) 返回一个逻辑列表,因此您可以使用逆 (!) 将列表子集为与模式不匹配的条目。
| 归档时间: |
|
| 查看次数: |
6248 次 |
| 最近记录: |