2011-10-10 124 views
2

我的問題如下。我正在使用R/igraph處理大數據圖。R從矢量/因子到列表

我需要將clusters()$membership(即矢量)的輸出轉換爲將值分組的列表。

實施例:我矢量(3,3,3,1,1,4,4)我需要具有下列estructure

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

此,該結構maximal.cliques()函數的輸出列表有

我試過在層次列表中使用lapply,然後使用它來查找特定值的索引。然而這表現非常糟糕。我正在處理可能存在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