【问题标题】:Algorithm to make a mutation waterfall plot (coded in R)制作突变瀑布图的算法(用 R 编码)
【发布时间】:2017-11-10 06:32:36
【问题描述】:

假设我有 m 个感兴趣的基因和 n 个样本。我将基因突变评分为 1,非突变评分为零,因此我有一个 m x n 矩阵。我想要一个排序数据的算法,以便我可以重现下面的矩阵图。我正在用 R 编写代码,所以欢迎使用代码,但不是必需的。

显然,我首先对行进行排序,使所有样本中突变最多的行位于顶部:

data.mutations <- data.mutations[order(rowSums(data.mutations), decreasing = TRUE), ]

我不知道如何对列进行排序。第一步很简单,我按第一行对列进行排序:

data.mutations <- data.mutations[ , order(data.mutations[1, ], decreasing = TRUE)]

现在我陷入了困境。一种天真的方法需要很多循环。必须有更好的解决方案。

【问题讨论】:

  • 您希望列的顺序是什么?除了重现显示的单个矩阵图之外,您没有明确说明组织规则 - 单个示例不足以最终推断规则。我有一个猜测:第 1 行中所有带有突变的突变列出现在第 1 行中没有突变的列之前;然后在每个块中重复第 2 行、第 3 行等。
  • 抱歉没有说清楚。但是是的,这是正确的。

标签: r algorithm sorting


【解决方案1】:

如果 A[1] > B[1],A 列应该出现在 B 列的左侧。在平局的情况下,将 A[2] 与 B[2] 进行比较,依此类推。换句话说,通过按行号的降序比较它们的值,在列上定义了一个比较运算符。这可以通过分配一个值 sum[r=1 to n] C[n]*2^(1-r) 以单个标量值编码。 (在 R 以外的语言中,这可以通过创建一个整数来完成,该整数的位对应于列的值)。然后,应按此编码标量的递减值对列进行排序。在 R 中,

n <- 15
m <- 20
p <- 0.15
mat <- matrix(0,n,m)
for (i in 1:n) {
  for (j in 1:n) {
    mat[i,j] = rbinom(1,1,0.15)
  }
}
print(mat)

# Order by row
mat <- mat[order(rowSums(mat),decreasing=TRUE),]

# Order by column
code <- function(column) {
  n <- length(column)
  pow <- 2^-(0:(n-1))
  return (column %*% pow)
}
mat <- mat[,order(apply(mat,2,code),decreasing=TRUE)]

print(mat)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多