分区筛选列表

时间:2018-11-12 10:15:34

标签: r filter partitioning

我将过滤一个列表,例如:[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

1 个答案:

答案 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