0

这是一个数据框;

    204 205 206 207 208 209 210 211 212 213
X1  0   1   1   0   0   1   1   1   1   0
X2  0   1   1   0   0   1   1   1   1   0
X3  0   0   1   0   0   1   1   1   1   0
X4  0   0   0   1   0   1   1   0   1   0
X5  1   0   1   0   1   1   1   1   0   1

我想对列进行排序,以便在热图中获得最佳表示,其中 1 是红色,0 是白色。所以我应该得到类似的东西:

    209 210 212 212 206 211 205 207 204 213
X1  1   1   1   1   1   1   1   0   0   0
X2  1   1   1   1   1   1   1   0   0   0
X3  1   1   1   1   1   1   0   0   0   0
X4  1   1   1   1   0   0   0   1   0   0
X5  1   1   0   0   1   1   0   0   1   1

这个想法是在同一行中收集更多的 0 和 1,以获得可能的最佳热图表示。

4

2 回答 2

3

您可以将列和行排序为:

mat <- mat[, order(colSums(mat), decreasing = T)]
mat[order(rowSums(mat), decreasing = T),]

   209 210 206 211 212 205 204 207 208 213
X5   1   1   1   1   0   0   1   0   1   1
X1   1   1   1   1   1   1   0   0   0   0
X2   1   1   1   1   1   1   0   0   0   0
X3   1   1   1   1   1   0   0   0   0   0
X4   1   1   0   0   1   0   0   1   0   0

编辑

您也可以考虑权重向量:

weights <- c(5:1)

mat[, order(colSums(weights%*%mat), decreasing = T)]

   209 210 212 206 211 205 207 204 208 213
X1   1   1   1   1   1   1   0   0   0   0
X2   1   1   1   1   1   1   0   0   0   0
X3   1   1   1   1   1   0   0   0   0   0
X4   1   1   1   0   0   0   1   0   0   0
X5   1   1   0   1   1   0   0   1   1   1
于 2019-02-07T15:46:05.723 回答
2

假设你data.frame被称为df,你可以这样做:

df[, order(colSums(df), decreasing = TRUE)]
于 2019-02-07T15:44:44.707 回答