簡體   English   中英

如何通過行名而不是​​數字索引刪除矩陣的行?

[英]How to remove rows of a matrix by row name, rather than numerical index?

我有矩陣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。

使用索引時,不能使用“負”字符向量。 您可以使用%in%轉換為邏輯

g[!rownames(g) %in% remove, ]

如果你真的想使用負索引,可以這樣做:

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

...但是當目標向量中沒有任何rownames時,它會產生令人討厭的潛在錯誤結果。 結果可能是沒有返回值。

索引時不能對字符向量進行否定索引。 將你的矢量remove轉換為布爾值。 我已經定義了一個函數

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

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

我使用“setdiff”如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM