R из вектора / фактора в список

#r #igraph

#r #igraph

Вопрос:

Моя проблема заключается в следующем. Я имею дело с графиками больших данных, используя R / igraph.

Мне нужно преобразовать выходные clusters()$membership данные (т.е. Вектор) в список, который группирует значения.

Пример: у меня есть вектор (3,3,3,1,1,4,4). Мне нужен список, имеющий следующую структуру

 l<-list()
l[["3"]]<-c(1,2,3)
l[["4"]]<-c(6,7)
l[["1"]]<-c(4,5)
  

это структура maximal.cliques() , которую имеет вывод функции

Я пытался использовать lapply для списка уровней, а затем использовать который для поиска индексов для определенного значения. Однако это работает очень плохо. Я имею дело с векторами данных из 180 тыс. элементов, где может быть 60 тыс. различных уровней.

Ответ №1:

посмотрите на split():

 > x <- c(3,3,3,1,1,4,4)
> y <- 1:7
> split(y, x)
$`1`
[1] 4 5

$`3`
[1] 1 2 3

$`4`
[1] 6 7


> z <- data.frame(x,y)
> split(z, z$x)
$`1`
  x y
4 1 4
5 1 5

$`3`
  x y
1 3 1
2 3 2
3 3 3

$`4`
  x y
6 4 6
7 4 7

>
  

Ответ №2:

Вы можете использовать lapply :

 > test.vec <- c(3,3,3,1,1,4,4)
> test.u <- unique(test.vec)
> test.l <- lapply( test.u, function(x, test.vec) which(test.vec==x), test.vec=test.vec )
> names(test.l) <- test.u
> test.l
$`3`
[1] 1 2 3

$`1`
[1] 4 5

$`4`
[1] 6 7