2016-03-22 14 views
-1

私はマトリックスを持っています(上記参照)。私は種の名前と植物の亜種を並べています。マトリックスからの抽出の観察

私は種だけを持つ同じ行列と、亜種だけの行列を生成したいと思います。

私の最初のマトリックスの種は1つの単語(abelia,abis)で構成されており、亜種は常に2つの単語(abies albaなど)を含んでいます。

Rでどのように行うことができますか?

+4

ようこそスタックオーバーフロー! [ツアー](http://stackoverflow.com/tour)をご覧になり、[How to Ask](http://stackoverflow.com/help/how-to-ask)を読んで、ここから質問から私たちが期待していることを理解してください。ここではゼロスクラッチコーディングサービスは提供していませんのでご注意ください。既に試したこと、失敗した方法、お手伝いできるかもしれないことをお見せしてください。 – Nitish

答えて

1

行列がmと呼ばれていると仮定すると、あなたはこの試みることができる:lapply(..,length)lengths()で置き換えることができることを指摘し@akrunする

species_rows <- lengths(strsplit(rownames(m)," "))==1 #split the rownames at whitespaces, retain only rows that are not split (vector of length 1). 
species_mat <- m[species_rows,] #logical subsetting 
subspecies_mat <- m[!species_rows,] #logical subsetting with negation 

Hatの先端を。


それとももっと簡単:

species_rows <- !grepl(" ",rownames(m)) # does the row.name NOT contain a whitespace? (TRUE/FALSE) 
species_mat <- m[species_rows,] 
subspecies_mat <- m[!species_rows,] 
0

が示唆したように、あなたの質問にサンプルデータを提供する場合はSO、それが優れているとされていますへようこそ。言っ

は、私はあなたがすることができると思う:

sp <- grep(" ", rownames(a)) 

そして最後に、新しいマトリクスに割り当てる:

# First, generate data: 
a <- matrix(sample(c(0, 1), 20), ncol = 4) 
rownames(a) <- c("abies", 
       "abies alba", 
       "abies amabilis", 
       "abies balsamea", 
       "abies concolor") 

その後、あなたは空のスペースが含まれている名前を見つけるためにgrepを使用することができます。

subspecies <- a[sp,] 
species <- a[-sp,] 

補足として、私はマトリックスの代わりにデータフレームで作業することをお勧めします。 d rownamesではなく変数に名前を割り当てる。