2011-03-04 19 views
2

我有一個很大的數據框(名爲test)和不同的rownames。用一個子串替換數據幀的rownames

> rownames(test) 
[1] "U2OS.EV.2.7.9" "U2OS.PIM.2.7.9" "U2OS.WDR.2.7.9" "U2OS.MYC.2.7.9" 
[5] "U2OS.OBX.2.7.9" "U2OS.EV.18.6.9" "U2O2.PIM.18.6.9" "U2OS.WDR.18.6.9" 
[9] "U2OS.MYC.18.6.9" "U2OS.OBX.18.6.9" "X1.U2OS...OBX" "X2.U2OS...MYC" 
[13] "X3.U2OS...WDR82" "X4.U2OS...PIM" "X5.U2OS...EV" "exp1.U2OS.EV" 
[17] "exp1.U2OS.MYC" "EXP1.U20S..PIM1" "EXP1.U2OS.WDR82" "EXP1.U20S.OBX" 
[21] "EXP2.U2OS.EV" "EXP2.U2OS.MYC" "EXP2.U2OS.PIM1" "EXP2.U2OS.WDR82" 
[25] "EXP2.U2OS.OBX" 

正如您所看到的,部分行名稱具有相同的部分名稱。例如,部分名稱爲MYC的每一行我想將整個rowname更改爲「MYC」。總體而言,行名包含5個因子:MYCEV,PIMWDROBX

+0

在R中,您不允許有一個數據幀重複的行名稱! – teucer 2011-03-04 08:54:35

+0

你使用colnames和rownames相當混亂。 – 2011-03-04 09:14:16

+0

@Joris,@Lisanne:我懷疑列名參考可能是一個錯字。 – csgillespie 2011-03-04 09:17:10

回答

5

正如@teucer指出的那樣,您不能有重複的行名稱。相反,您可以在數據框中創建一個新列,並使用簡單的正則表達式來提取您的因素。例如,

## Your row names 
x = c("U2OS.EV.2.7.9", "U2OS.PIM.2.7.9", "U2OS.WDR.2.7.9", "U2OS.MYC.2.7.9", 
     "U2OS.OBX.2.7.9", "U2OS.EV.18.6.9", "U2O2.PIM.18.6.9","U2OS.WDR.18.6.9", 
     "U2OS.MYC.18.6.9","U2OS.OBX.18.6.9", "X1.U2OS...OBX","X2.U2OS...MYC") 

test$rnames = gsub(".*(MYC|EV|PIM|WDR|OBX).*", "\\1", x) 
+2

+1好用的gsub – 2011-03-04 09:13:24

2

替代使用stringr包。

str_extract(x, "MYC|EV|PIM|WDR|OBX") 
相關問題