私はマトリックスを持っています(上記参照)。私は種の名前と植物の亜種を並べています。マトリックスからの抽出の観察
私は種だけを持つ同じ行列と、亜種だけの行列を生成したいと思います。
私の最初のマトリックスの種は1つの単語(abelia
,abis
)で構成されており、亜種は常に2つの単語(abies alba
など)を含んでいます。
Rでどのように行うことができますか?
私はマトリックスを持っています(上記参照)。私は種の名前と植物の亜種を並べています。マトリックスからの抽出の観察
私は種だけを持つ同じ行列と、亜種だけの行列を生成したいと思います。
私の最初のマトリックスの種は1つの単語(abelia
,abis
)で構成されており、亜種は常に2つの単語(abies alba
など)を含んでいます。
Rでどのように行うことができますか?
行列が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,]
が示唆したように、あなたの質問にサンプルデータを提供する場合は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ではなく変数に名前を割り当てる。
ようこそスタックオーバーフロー! [ツアー](http://stackoverflow.com/tour)をご覧になり、[How to Ask](http://stackoverflow.com/help/how-to-ask)を読んで、ここから質問から私たちが期待していることを理解してください。ここではゼロスクラッチコーディングサービスは提供していませんのでご注意ください。既に試したこと、失敗した方法、お手伝いできるかもしれないことをお見せしてください。 – Nitish