用R的“模式”列对矩阵进行排序

时间:2019-02-07 15:33:56

标签: r dataframe matrix

这是一个数据框;

    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,以获得最佳的热图表示。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

df[, order(colSums(df), decreasing = TRUE)]
相关问题