我有一个具有不同rownames的大型数据框(名为test)。
> 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个因素:MYC
,EV
,PIM
,WDR
和OBX
。
答案 0 :(得分: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)
答案 1 :(得分:2)
使用stringr
包替代。
str_extract(x, "MYC|EV|PIM|WDR|OBX")