【问题标题】:Create data.frame by subtracting row and column name delimiters通过减去行和列名称分隔符创建 data.frame
【发布时间】:2016-09-24 02:56:42
【问题描述】:

我有一个距离矩阵,其中行和列由第一个下划线后表示的数值分隔(例如,7A_0_AAGCCTAGCGAC = 0)。我想要一种以行与列方式比较这些值的方法。比如说,我想从列分隔符中减去行分隔符。

输入:

                  7A_0_AAGCCTAGCGAC 7A_4_AAATGACTGGCC 7A_7_CATCTCGTTCTA
7A_0_AAGCCTAGCGAC        0.00000000       0.034312102        0.04539427
7A_4_AAATGACTGGCC        0.03431210       0.000000000        0.01422137
7A_7_CATCTCGTTCTA        0.04539427       0.014221369        0.00000000

预期输出:

                  7A_0_AAGCCTAGCGAC 7A_4_AAATGACTGGCC 7A_7_CATCTCGTTCTA
7A_0_AAGCCTAGCGAC        0.00000000                -4                -7
7A_4_AAATGACTGGCC                 4       0.000000000                -3
7A_7_CATCTCGTTCTA                 7                 3        0.00000000

任何帮助将不胜感激。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以分别从列名和行名中提取数值,然后进行外减:

    # extract numeric values from the dimension names of the matrix
    cols = as.numeric(sub(".*_(\\d+)_.*", "\\1", colnames(mat)))
    rows = as.numeric(sub(".*_(\\d+)_.*", "\\1", rownames(mat)))
    
    # calculate an outer subtract from the two vectors
    output <- outer(cols, rows, "-")
    
    # set up the dimension name
    dimnames(output) <- list(rownames(mat), colnames(mat))
    
    output
    #                  7A_0_AAGCCTAGCGAC 7A_4_AAATGACTGGCC 7A_7_CATCTCGTTCTA
    #7A_0_AAGCCTAGCGAC                 0                -4                -7
    #7A_4_AAATGACTGGCC                 4                 0                -3
    #7A_7_CATCTCGTTCTA                 7                 3                 0
    

    【讨论】:

    • 一个相关问题:有没有办法在二进制意义上比较分隔符(例如,值匹配然后 0,值不匹配然后 1)?
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多