我有一个条目矩阵:
testMat <- matrix(1:30, nrow = 10)
rownames(testMat) <- letters[1:10]
...和一个rownames列表:
rem <- c("d", "e", "f", "i")
提取仅包含列表'rem'中提供的名称的行的矩阵很容易:
testMat[rem,]
遵循这个逻辑,我想从矩阵中删除列表'rem'中提供名称的行。但
testMat[-rem,]
与Error in -rem : invalid argument to unary operator
一起失败。
为什么这不起作用?
答案 0 :(得分:2)
您正在寻找%in%
:
testMat[!rownames(testMat) %in% rem, ]
[,1] [,2] [,3]
a 1 11 21
b 2 12 22
c 3 13 23
g 7 17 27
h 8 18 28
j 10 20 30
负数索引仅适用于数字索引。
答案 1 :(得分:2)
有点长但你可以这样做:
testMat[which(! rownames(testMat) %in% rem),]
[,1] [,2] [,3]
a 1 11 21
b 2 12 22
c 3 13 23
g 7 17 27
h 8 18 28
j 10 20 30
答案 2 :(得分:1)
要添加选项,我通常会喜欢setdiff
来处理这些事情:
setdiff(rownames(testMat), rem)
# [1] "a" "b" "c" "g" "h" "j"
testMat[setdiff(rownames(testMat), rem), ]
# [,1] [,2] [,3]
# a 1 11 21
# b 2 12 22
# c 3 13 23
# g 7 17 27
# h 8 18 28
# j 10 20 30