Упорядочить столбцы df в соответствии с целевым вектором (но имена совпадают только частично)

У меня есть data.frame (PC), который выглядит так:

http://i.stack.imgur.com/NWJKe.png

который имеет более 1000 столбцов с похожими именами.

И у меня есть вектор имен этих столбцов, который выглядит так:

http://i.stack.imgur.com/vQ48u.png

Я хочу отсортировать столбцы (начинающиеся с "GTEX") в data.frame таким образом, чтобы они были упорядочены по возрасту, указанному в матрице возраста.

PC <- read.csv("protein_coding.csv")
age <- read.table("Annotations_SubjectPhenotypes_DS.txt")

Я начал с изменения имен в возрастной матрице, заменив "-" на ".":

new_SUBJID <- gsub("-", ".", age$SUBJID, fixed = TRUE)
age[, "SUBJID"] <- new_SUBJID

Затем я упорядочил имена строк (SUBJUD) возрастной матрицы по возрасту:

sort.age <- with(age,  age[order(AGE) , ])
sort.age <- na.omit(sort.age)

Затем я создал вектор age.ID, содержащий SUBJID в правильном порядке (= как я хочу упорядочить столбцы из PC-матрицы).

age.id <- sort.age$SUBJID

Но затем я заблокирован, так как имена в матрице ПК и матрице возраста не совпадают... Кто-нибудь может мне помочь?

Заранее большое спасибо! Свальф


person Svalf    schedule 31.10.2015    source источник


Ответы (1)


Было бы лучше показать пример без использования изображения. Предположим, если есть две строки,

str1 <- c('GTEX.N7MS.0007.SM.2D7W1', 'GTEX.PFPP.0007.SM.2D8W1', 'GTEX.N7MS.0008.SM.4E3J1') 
str2 <- c('GTEX.N7MS', 'GTEX.PFPP')

представляющие имена столбцов «ПК» и столбец «SUBJID» набора данных «возраст» (после замены - на . и sorted), мы удаляем часть суффикса, сопоставляя ., за которым следуют 4 цифры (\\d{4}), за которыми следует один или больше символов в конец строки (.*$) и заменить его на ''.

 str1N <- sub('\\.\\d{4}.*$', '', str1)

str1[order(match(str1N, str2))]
#[1] "GTEX.N7MS.0007.SM.2D7W1" "GTEX.N7MS.0008.SM.4E3J1"
#[3] "GTEX.PFPP.0007.SM.2D8W1"
person akrun    schedule 31.10.2015