Подсчет векторов в списке с одинаковыми элементами в r - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть список из ~ 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)

должен дать мне счет 3 для c(1,2,3) и 2 для c(4,5) и 1 для c(1,2,3,5)

Я бы хотел подсчитать количество дубликатов, а не только их количество.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018
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

elements содержит все отдельные элементы векторов для каждой группы, а numbers - количество векторов в каждой группе.

0 голосов
/ 16 ноября 2018

Мы создаем функцию, которая принимает vector в качестве аргумента ('val'), затем перебираем list с sapply, проверяем, если all, то "val are% в% the 'x', andсумма the logical вектор`

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...