我有一个非常大的列联表(9000 * 9000),因为我对原始数据集中特定对出现的次数感兴趣。我希望以这样一种方式对其进行格式化:我有一个新的data.frame
,其中包含该对出现的次数,以及它是哪一对(rowname
和colname
的组合)
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
是否可以以不需要循环的方式执行此操作?
答案 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), ]