根据目标向量对 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' 列(将 -
替换为 .
和 sort
ed),我们通过匹配 .
后跟 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"
我有一个 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' 列(将 -
替换为 .
和 sort
ed),我们通过匹配 .
后跟 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"