如何通过行名而不是​​数字索引删除矩阵的行?

时间:2011-09-27 21:55:26

标签: r matrix subset rowname

我有矩阵 g

> g[1:5,1:5]
        rs7510853 rs10154488 rs12159982 rs2844887 rs2844888
NA06985 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06991 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06993 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06994 "CC"      "CC"       "CC"       "CC"      "CC"     
NA07000 "CC"      "CC"       "CC"       "CC"      "CC"     
> rownames(g)[1:2]->remove
> remove
[1] "NA06985" "NA06991"
> g[-remove,]
  

-remove中的错误:一元运算符的无效参数

有没有一种简单的方法可以做我想做的事情(从矩阵 g 中删除向量'remove'中引用的ID?

注意:这只是我实际想要做的模型,请不要只做g[-(1:2), ],我需要能够移除一大堆行我有ID-d。

3 个答案:

答案 0 :(得分:57)

使用索引时,不能使用“负”字符向量。您可以使用%in%

转换为逻辑
g[!rownames(g) %in% remove, ]

如果您真的想使用否定索引,可以这样做:

g[-which(rownames(g) %in% remove), ]

...然而,当目标向量中没有任何rownames时,它会产生令人讨厌的潜在错误结果。结果可能没有返回值。

答案 1 :(得分:7)

索引时不能对字符向量进行否定索引。将矢量remove变为布尔值。我已经定义了一个函数

`%notin%` <- function(x,y) !(x %in% y) 

然后可以这样使用:g[rownames(g) %notin% remove ,]

答案 2 :(得分:4)

我使用“setdiff”如下:

g[setdiff(rownames(g),remove),]