2016-04-07 2 views
0

У меня есть кадры двух данных следующим образом:Получение rownames для индексов строк в R

####DATA A 

AGT1 0.5 0.6 
AGT2 0.4 0.3 
AGT3 0.1 0.7 
AGT4 0.2 0.1 

#### DATA B 

     row row2 

GCT1 1  2 
GCT2 2  2 
GCT3 3  1 
GCT4 4  2 
GCT5 5  4 
GCT6 6  4 

Я хотел бы получить имена индексов строк в row2 путем индексации в DATA A и сделал это

C=DATA A[DATA B$row2,] 

Но это дает мне что-то вроде

AGT2 
AGT2.1 
AGT1 
AGT2.2 
AGT4 

есть ли еще лучший способ сделать это для индексации неуникальных значений строк ау Одевание .1, .2?

Таким образом, ожидаемый результат выглядит примерно так:

DATA B
 row row2 

GCT1 1  AGT2 
GCT2 2  AGT2 
GCT3 3  AGT1 
GCT4 4  AGT2 
GCT5 5  AGT4 
GCT6 6  AGT4 
+0

Что вы ожидаемый результат? – mtoto

+0

Отредактированный пост для ожидаемого выхода. Таким образом, индексы строк в строке 2 DATA B должны получить имена ростов из DATA A. – Paul

+0

Что-то вроде 'B $ row2 = rownames (A) [B $ row1]'? – Frank

ответ

0

Он работает как этот

< C -DATA A [DATA B $ row2,]

выход выглядит подобные

AGT2 0.5 0.6 
AGT2.1 0.5 0.6 
AGT1 0.5 0.6 
AGT2.2 0.5 0.6 
AGT4 0.2 0.1 

a d затем

DATA B$row2<-sapply(strsplit(rownames(C),"\\."), function(x) paste0(head(x,-1),collapse=".")) 

Окончательный вывод, что мы хотим

 row row2 

    GCT1 1  AGT2 
    GCT2 2  AGT2 
    GCT3 3  AGT1 
    GCT4 4  AGT2 
    GCT5 5  AGT4 
    GCT6 6  AGT4