在r中使用相同元素对列表中的向量进行计数
我有一个大约8000个向量的列表,我想知道这8000个向量中有多少个重复,但是每个向量中元素的顺序可能不同 例如:在r中使用相同元素对列表中的向量进行计数,r,list,R,List,我有一个大约8000个向量的列表,我想知道这8000个向量中有多少个重复,但是每个向量中元素的顺序可能不同 例如: list <- c() list[[1]] <- c(1,2,3) list[[2]] <- c(2,1,3) list[[3]] <- c(3,2,1) list[[4]] <- c(4,5) list[[5]] <- c(5,4) list[[6]] <- c(1,2,3,5) list我们创建一个函数,将vector作为参数('v
list <- c()
list[[1]] <- c(1,2,3)
list[[2]] <- c(2,1,3)
list[[3]] <- c(3,2,1)
list[[4]] <- c(4,5)
list[[5]] <- c(5,4)
list[[6]] <- c(1,2,3,5)
list我们创建一个函数,将vector
作为参数('val'),然后使用sapply
在list
中循环,检查是否所有的val都是%在%的“x”中,以及求和逻辑的向量`
f1 <- function(lst, val) sum(sapply(lst, function(x) all(val %in% x)))
f1(list, c(1, 2, 3))
[#1] 3
f1(list, c(4, 5))
#[1] 2
f1library(tidyverse)
图书馆(gtools)
你是否需要length(unique(list))
同样,如果你需要所有的副本,那么sum(duplicated(lst)| duplicated(lst,fromLast=TRUE))
在某种意义上,但是我想要某种函数告诉我哪个列表被复制了多少次,在上面的例子中它将是c(1,2,3)=3
或类似的内容您显示的不是列表列表而是向量列表您有输入错误:list
应该是第一行的list
是的,谢谢。我试图让它重现,但那部分却漏掉了。所以实际上这一半起作用了。。当向量包含更多元素时,我不会得到额外的计数,例如,我已经对向量进行排序,然后使用==而不是%in%。这是我现在唯一能想到的办法。如有其他解决方案,我们将不胜感激。
library(tidyverse)
library(gtools)
get_perm <- function(v) {
m <- permutations(n = length(v), r = length(v), v = v, set = F)
m[order(c(m))]
}
all <- map(list, get_perm)
unique <- map(list, get_perm) %>% unique()
res_vec <- c()
element <- c()
for(i in seq_along(unique)) {
element[[i]] <- unique[[i]] %>% unique() %>% paste(collapse = ",")
res_vec[[i]] <- all %in% unique[i] %>% sum()
}
tibble(
elements = unlist(element),
numbers = res_vec
)
# A tibble: 3 x 2
elements numbers
<chr> <int>
1 1,2,3 3
2 4,5 2
3 1,2,3,5 1