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

时间:2015-10-31 12:24:40

标签: r matrix vector columnsorting

我有一个 data.frame(PC),如下所示:

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

有1000多个列名相同的列。

我有一个那些列名的向量,如下所示:

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

我想在data.frame中对列(以“GTEX。”开头)进行排序,使它们按年龄矩阵中指示的年龄排序。

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

我首先更改年龄矩阵中的名称,将' - '替换为'。':

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

然后,我按年龄订购了年龄矩阵的行名称(SUBJUD):

age.id <- sort.age$SUBJID

然后我按正确的顺序创建了一个包含SUBJID的矢量 age.ID (=我想如何从 PC矩阵中订购列)。

{{1}}

但是由于 PC矩阵年龄矩阵上的名字不一样,我被阻止了......有人可以帮帮我吗?

非常感谢您提前! Svalf

1 个答案:

答案 0 :(得分:0)

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

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

表示'age'的列名和'age'数据集的'SUBJID'列(在用-. ed替换sort之后),我们删除后缀部分匹配.后跟4位数字(\\d{4}),后跟一个或多个字符到字符串末尾(.*$)并将其替换为''。< / p>

 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"