R из вектора / фактора в список - PullRequest
2 голосов
/ 10 октября 2011

Моя проблема заключается в следующем. Я имею дело с большими графами данных, используя 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 в списке уровней, а затем использовать, чтобы найти индексы для определенного значения. Однако это действительно плохо. Я имею дело с векторами данных из 180K элементов, где могут быть различные уровни 60K.

Ответы [ 2 ]

5 голосов
/ 10 октября 2011

посмотрите на 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

>
1 голос
/ 10 октября 2011

Вы можете использовать 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
...