2017-07-17 6 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) 

持っている:2つのデータフレームである

 [,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 gangingは私のデータフレーム名なので、分割してみました(ギャング、f =ギャング[1]) – Hibu

+0

あなたの体に試したものを追加してくださいコメントではなく質問です。データセットが大きい場合、 'dput(ganging)'や 'dput(head(ganging、20))の出力を貼り付けることで、data.frameのおもちゃの例をあなたの質問に含めてください。 – lmo

答えて

0

を理解されるであろう。 applypasteを使用して、行要素のベクトルを1行につき1つの文字列として取得します。これをsplitに送り、行列の行数を複製して行列の行を分割します。次に、splitが出力するグループ化された行のリストをlapplyに送り、dataAのサブセットを実行します。名前を追加するには

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 

を返し

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

、次のようなリスト項目のインデックスに「グループ」を貼り付けることができます。

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

それは名前で行列の順番を維持することが重要であるならば、あなたはunique(apply(dataA, 1, paste, collapse=" ")))が元の順序で行列のユニークな行の表が含まれていmatch

# use index from match() as argument to paste0 
names(myMatList) <- paste0("Group", match(names(myMatList), 
              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

関連する問題