2016-05-25 17 views
0

私は、27変数の187,727の観測の行列を持っています。大規模なデータマトリックスの再構築

各行は、種名とその名前に関連する形質の測定値で構成されています。各種について不均一な観察がある。

行列をやや簡単に見直したいと思います。私の最初の考えは、一意の種の名前の数を特定し、その種がいくつあるかを特定し、各種の名前の下に情報がグループ化されたリストにデータをシフトするforループを作成することでした。私は種情報の各セットを別々に見直すことができました。

残念ながら、私はこれをどうやって行うのかを理解する上での障害に遭遇しました。

traits <- list() 

for(i in 1:length(unique(data.traits$AccSpeciesName))){ 

    name <- data.traits$AccSpeciesName[i] 

     for(j in 1:sum(data.traits$AccSpeciesName %in% data.traits$AccSpeciesName[name])){ 

      traits[i,j] <- data.traits[j,] 

    } 
} 
+1

を 'split'を使用することを学びます。 –

+2

再現可能なデータを提供できますか? 'dput(head(data.traits)) 'の出力は、例えば大いに役立ちます。 –

+1

また、その小さなデータセットに必要な答えを表示します。 –

答えて

0

あなたが提供するグループ化係数fに基づいてデータフレームまたは行列を分割する?splitを見てみてください、ユーザー42は、あなたがこの問題を解決示唆されたかを確認するには:ここで私は得ることができたどのくらいです。ここで小さな例です:

data(iris) 
mylist = split(x = iris, f = iris$Species) 
lapply(mylist, summary) 

より明示的なコードは次のようになります。

data(iris) 

# using `split` ---- 
mylist = split(iris, iris$Species) 

# return the rows of the data frame where the Species column is equal ---- 
# to each of the unique values that the column takes --------------------- 
mylist2 = lapply(levels(iris$Species), function(x) iris[iris$Species == x,]) 
names(mylist2) = levels(iris$Species) # so that all.equal will return TRUE 

# compare the two ways -------- 
all.equal(mylist, mylist2) # TRUE 
関連する問題