【问题标题】:Order df columns according to a target vector (but the names match only partially)根据目标向量对 df 列进行排序(但名称仅部分匹配)
【发布时间】:2016-01-31 19:08:28
【问题描述】:

我有一个如下所示的 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 矩阵 上的名称不一样...有人可以帮我吗?

提前非常感谢您! 斯瓦尔夫

【问题讨论】:

    标签: r matrix vector columnsorting


    【解决方案1】:

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

    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后),我们通过匹配@987654325去除后缀部分@ 后跟 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2021-11-12
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      相关资源
      最近更新 更多