根据目标向量对 df 列进行排序(但名称仅部分匹配)

Order df columns according to a target vector (but the names match only partially)

我有一个 data.frame (PC),看起来像这样:

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

其中有 1000 多个名称相似的列。

我有一个 那些列名称的向量 看起来像这样:

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

我想对 data.frame 中的列(从 "GTEX." 开始)进行排序,以便它们按 年龄矩阵 中指示的年龄排序.

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

但后来我被屏蔽了,因为 PC 矩阵age 矩阵 上的名字不一样...有人可以吗请帮我?

非常感谢您! 斯瓦尔夫

如果不使用图像来展示示例会更好。假设,如果有两个字符串,

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

表示 'PC' 的列名和 'age' 数据集的 '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"