2017-07-17 68 views
-1

我有一個數據矩陣矩陣劃分,使每個數據幀包含重複行

dataA <- matrix(c(0.74, 1.00,0.56, 0.74, 1.00,0.56, 0.74, 1.00, 0.56,0.39, 0.79, 0.35, 0.39, 0.79, 0.35), ncol=3, nrow=3) 

,看起來像:

 [,1] [,2] [,3]  
[1,] 0.74 1.00 0.56  
[2,] 0.74 1.00 0.56  
[3,] 0.74 1.00 0.56  
[4,] 0.39 0.79 0.35  
[5,] 0.39 0.79 0.35 

,我需要得到的是兩個數據幀即會看起來像:

組別1

 [,1] [,2] [,3] 
1  0.74 1.00 0.56  
2  0.74 1.00 0.56  
3  0.74 1.00 0.56 

組2

 [,1] [,2] [,3] 
4 0.39 0.79 0.35  
5 0.39 0.79 0.35 

任何幫助,將不勝感激

+0

你嘗試過這麼遠嗎? – lmo

+0

@Imo拼貼是我的數據框的名字,所以我試圖分裂(拼貼,F =勾搭[,1])勾搭[,1] [複製(勾搭[,1])]] – Hibu

+0

添加你試過什麼的你的身體而不是在評論中。如果數據集很大,通過粘貼'dput(ganging)'或'dput(head(ganging,20))'的輸出,在你的問題中包含一個你的data.frame的玩具示例。 – lmo

回答

0

下面是做到這一點的方法之一。使用applypaste可以將行元素的向量作爲每行的單個字符串使用。將其輸入split以及矩陣的行數,以便通過重複項來分割矩陣行。然後將split輸出的分組行的列表饋送到lapply以執行數據A的子集化。

myMatList <- lapply(split(seq_len(nrow(dataA)), 
          apply(dataA, 1, paste, collapse=" ")), 
        function(x) dataA[x,]) 

返回

myMatList 

$`0.39 0.79 0.35` 
    [,1] [,2] [,3] 
[1,] 0.39 0.79 0.35 
[2,] 0.39 0.79 0.35 

$`0.74 1 0.56` 
    [,1] [,2] [,3] 
[1,] 0.74 1 0.56 
[2,] 0.74 1 0.56 
[3,] 0.74 1 0.56 

要添加的名稱,你可以在「組」粘貼到像這樣的列表項的索引。

names(myMatList) <- paste0("Group", seq_along(myMatList)) 

如果保持在名稱矩陣的順序很重要,你可以使用match

# use index from match() as argument to paste0 
names(myMatList) <- paste0("Group", match(names(myMatList), 
              unique(apply(dataA, 1, paste, collapse=" ")))) 

其中unique(apply(dataA, 1, paste, collapse=" ")))包含在它原來的順序的矩陣的唯一行的表。

數據

dataA <- matrix(c(rep(c(0.74, 1.00,0.56), 3), rep(c(0.39, 0.79, 0.35), 2)), 5, byrow=TRUE) 
+0

@Imo非常感謝您的幫助!它工作完美。我怎麼能給這些組我自己的名字像Group1和Group2?我有一個巨大的數據集,在這裏我只給了一小部分。 – Hibu