我有一个 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
答案 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"