#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