从最高值到最低值对大表进行排序

时间:2015-07-17 18:08:43

标签: r

我有一个非常大的列联表(9000 * 9000),因为我对原始数据集中特定对出现的次数感兴趣。我希望以这样一种方式对其进行格式化:我有一个新的data.frame,其中包含该对出现的次数,以及它是哪一对(rownamecolname的组合)

d = data.frame(x1 = c(0,3,3,6),x2 = c(6,4,7,3))
> d
  x1 x2
1  0  6
2  3  4
3  0  7
4  6  3

我想要以下内容:

  Num pair
1   7 x2-3
2   6 x2-1
3   6 x1-4
4   4 x2-2 
5   3 x2-4
6   3 x1-2
7   0 x1-3
8   0 x1-1

是否可以以不需要循环的方式执行此操作?

2 个答案:

答案 0 :(得分:1)

你所追求的并不是很清楚,但这很好地模仿了你的输出:

out1<-unlist(d)
names(out1)<-paste0(rep(colnames(d),each=nrow(d)),"-",rownames(d))
out2<-sort(out1,decreasing=T)
result<-data.frame(Num=out2,pair=names(out2),row.names=1:length(out2))

> result
  Num pair
1   7 x2-3
2   6 x1-4
3   6 x2-1
4   4 x2-2
5   3 x1-2
6   3 x1-3
7   3 x2-4
8   0 x1-1

此外,如果您真的想要在问题陈述中提供的确切顺序,则第3行应更改为:

out2<-sort(out1[sort(names(out1),decreasing=T)],decreasing=T)

答案 1 :(得分:1)

result <- data.frame(Num = unlist(d),
                     pair = paste0(col(d,as.factor = T),'-',row(d)))
result[order(result$Num,decreasing = T), ]