web-dev-qa-db-ja.com

row.namesによるマトリックスのサブセット化

次のrow.namesを持つマトリックスがあります。

"X1"   "X5"   "X33"  "X37"  "X52"  "X566"

次に、リストのエントリに一致する行のみを選択します。

include_list <- c("X1", "X5", "X33")

私はこのようなことをすることを想像します:

data.subset <- subset(data, row.names == include_list)

ただし、この特定のコードは仕事をしていないようです。この方法でサブセット化を実行するにはどうすればよいですか?

14
histelheim

いくつかの偽データを設定します。

_m <- matrix(1:30, 6, 5)
rownames(m) <- c("X1", "X5", "X33", "X37", "X52", "X566")
m
#      [,1] [,2] [,3] [,4] [,5]
# X1      1    7   13   19   25
# X5      2    8   14   20   26
# X33     3    9   15   21   27
# X37     4   10   16   22   28
# X52     5   11   17   23   29
# X566    6   12   18   24   30
_

ここでは、おそらくマトリックスインデックス(_[_)でサブセット化するのが最も簡単です。

_include_list <- c("X1", "X5", "X33")
m[include_list, ]
#     [,1] [,2] [,3] [,4] [,5]
# X1     1    7   13   19   25
# X5     2    8   14   20   26
# X33    3    9   15   21   27
_

subset()関数の代替:

_subset(m, rownames(m) %in% include_list)
#      [,1] [,2] [,3] [,4] [,5]
# X1     1    7   13   19   25
# X5     2    8   14   20   26
# X33    3    9   15   21   27
_
28
Rich Scriven

これも動作するようです:

include_list <- head(read.csv("/Users/histelheim/include_list.csv", header = FALSE))
include_list <- c(do.call("cbind", include_list)) 
data[row.names(data) %in% include_list, ]
3
histelheim

誰かのinclude_listがクラスlist(ベクトルではなく)である場合に備えて、この場合、これは this に基づいてそのような場合に機能するRich Scrivenの回答の修正です。 unlist()を追加する必要があります:

m <- matrix(1:30, 6, 5)
rownames(m) <- c("X1", "X5", "X33", "X37", "X52", "X566")
include_list <- list("X1", "X5", "X33")


m[unlist(include_list), ]
0
BanAnanas