我浏览了类似的帖子,并尝试了它们,但仍然无法解决我的问题。
我有一个向量列表,如下
y2 <- c(0,0,NA,0,0,0,0)
y <- c(0,0,0,NA,NA,0)
x <- c(0,0,0,0)
li <-list(y2,y,x)
li
如果确切的向量是另一个向量的子集,我想从列表中删除向量。
例如,在我的情况下,由于是的确切子集,因此我应该有y2
和y
结果x
从列表中删除。x
y2
我写了以下脚本,但它只给出y2作为结果,而忽略了y
:
UniquePath <- function(PATHS)
{
for(j in length(PATHS):1)
{
for(i in 1:length(PATHS))
{
if((i!=j)&(isTRUE(all(is.element(PATHS[[j]],PATHS[[i]])))))
{
PATHS<-PATHS[-j]
break
}
else
{
next
}
}
}
return(PATHS)
}
我的方法是(假设您的字符串中没有“;”)
# make li unique
li <- unique(li)
# collapse each unique list element to a length-1 string surrounded by ";"
x <- sapply(li, function(x) paste0(";", paste(x, collapse = ";"), ";"))
# check each element, if this is found somewhere in any other element
li[sapply(seq_along(x), function(i) !any(grepl(x[i], x[-i], fixed = TRUE)))]
# [[1]]
# [1] 0 0 NA 0 0 0 0
#
# [[2]]
# [1] 0 0 0 NA NA 0
但是,似乎OP应该构成一个更大的示例,并澄清在注释中针对其他答案提出的一些问题。
注意:在此答案中,当且仅当x的确切序列存在于y中且中间没有任何其他元素时,才将x定义为y的子集。这就是我对问题的理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句