这是一个数据框;
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,以获得最佳的热图表示。
答案 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)]