Замена имен строк фрейма данных подстрокой

У меня есть большой фрейм данных (с именем 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 я хочу изменить полное имя строки на «MYC». Всего имена строк содержат 5 факторов: MYC, EV, PIM, WDR и OBX.


person Lisanne    schedule 04.03.2011    source источник
comment
в R вам не разрешено иметь повторяющиеся имена строк для фрейма данных!   -  person teucer    schedule 04.03.2011
comment
ваше использование имен столбцов и имен строк довольно запутанно.   -  person Joris Meys    schedule 04.03.2011
comment
@Joris, @Lisanne: я подозреваю, что ссылка на имена столбцов может быть опечаткой.   -  person csgillespie    schedule 04.03.2011
comment
@csgillespie: на самом деле я совершенно уверен...   -  person Joris Meys    schedule 04.03.2011


Ответы (2)


Как указывает @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)
person csgillespie    schedule 04.03.2011

Альтернатива с использованием пакета stringr.

str_extract(x, "MYC|EV|PIM|WDR|OBX")
person Richie Cotton    schedule 04.03.2011