简体   繁体   中英

R // subset matrix rows and columns based on names

I want to subset a large matrix (columns and rows) based on a list input (which will change dynamically). Example (see reproducible example below): I have a symmetric matrix (x) and a list containing the rows and column I want to have in my subset (categories). How do I subset rows and columns so that my results only shows rows & columns for a and c (see desired output)

categories = c("a", "c")

a = c(2,3,4)
b = c(1,9,8)
c = c(5,6,7)

x = cbind(a,b,c)
rownames(x) <- c("a", "b", "c")
x = as.matrix(x)

# attempt: 
result = x[x %in% categories == TRUE]

desired output 
a = c(2,4)
c = c(5,7)
y = cbind(a,c)
rownames(y) <- c("a", "c")
y = as.matrix(y)

You may also subset for names.

y <- x[c("a", "c"), c("a", "c")]
y
#   a c
# a 2 5
# c 4 7

Or, using subset

y <- subset(x, colnames(x) %in% c("a", "c"), 
            rownames(x) %in% c("a", "c"))
y
#   a c
# a 2 5
# c 4 7

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM