2011-10-10 2 views
2

내 문제는 다음과 같습니다. 저는 R/igraph를 사용하여 큰 데이터 그래프를 다루고 있습니다.R from vector/factor to list

clusters()$membership (벡터)의 출력을 값을 그룹화하는 목록으로 변환해야합니다.

예 : I는 벡터 (3,3,3,1,1,4,4) I는 다음 estructure

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

이되면, 구조를 maximal.cliques() 함수의 출력을 갖는리스트를 가질 필요 있다

나는 수준의 목록에 lapply를 사용하고 특정 값에 대한 색인을 찾기 위해 which를 사용하여 시도했다. 그러나 이것은 실제로 제대로 수행되지 않습니다. 저는 60K의 다른 레벨이있을 수있는 180K 요소의 데이터 벡터를 다루고 있습니다. 분할에

답변

5

모양() :

> 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 

> 
+0

+1. –

1

당신은 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