我将过滤一个列表,例如:[1] (33,7)(4)(5)(6)(8)
,如果该项目中有两次相同的元素,则返回true或false,例如:
(33,7)(4)(5)(33)FALSE
(33,33)(4)(5)(6) FALSE
but元素,其中apperas两次在位置2和3、4、5或6和7附近的元素返回TRUE,但是例如,如果列表是7个元素,则最后两个元素必须不同:
(33,1)(7)(7)(6) TRUE
(33,1)(7)(6)(5)(5)(9) TRUE
(33,1)(7)(6)(6) FALSE
(33,1)(1)(9)(6)(7) FALSE
(33,1)(9)(9)(6)(1) FALSE
答案 0 :(得分:0)
如评论中所示,目前尚不清楚手头上的数据结构。但是,这可能会有所帮助:
# creating a dummy example
lst <- list()
lst[[1]] <- c(33,33)
lst[[2]] <- c(7)
lst[[3]] <- c(4)
lst[[4]] <- c(6)
lst[[5]] <- c(6)
lst[[6]] <- c(1)
# with str(lst) giving:
List of 6
$ : num [1:2] 33 33
$ : num 7
$ : num 4
$ : num 6
$ : num 6
$ : num 1
现在,我们使用函数unique
删除重复项和str(unique(lst))
的结果:
List of 5
$ : num [1:2] 33 33
$ : num 7
$ : num 4
$ : num 6
$ : num 1
所以现在,一个简单的比较就可以解决问题,例如
length(lst) == length(unique(lst))
# yielding
[1] FALSE
现在是一个示例,其中有多个这样的列表:
# creating the example
lst <- lst1 <- lst2 <- list()
# list 1
lst1[[1]] <- c(33,33)
lst1[[2]] <- c(7)
lst1[[3]] <- c(4)
lst1[[4]] <- c(6)
lst1[[5]] <- c(6)
lst1[[6]] <- c(1)
# list 2
lst2[[1]] <- c(33,33)
lst2[[2]] <- c(7)
lst2[[3]] <- c(4)
lst2[[4]] <- c(5)
lst2[[5]] <- c(6)
lst2[[6]] <- c(1)
# lst is a list of two lists
lst <- list(lst1,lst2)
# testing for duplicates
vapply(1:length(lst),
function(k) length(lst[[k]]) == length(unique(lst[[k]])),
logical(1))
# output
[1] FALSE TRUE