【发布时间】:2013-04-29 14:09:28
【问题描述】:
google了很多,Stackoverflow中有很多有用的R代码解决方案。 我有两个矩阵,它们是索引矩阵和实际返回矩阵。 它们的尺寸相同(大约 500 x 500 矩阵?) 它们太大了,所以我用小得多的例子来锻炼。
> setwd("B:/FE/2013.4.28")
> data <- read.csv("ex.csv")
> data
a b c d e f g h i
1 7 5 2 1 11 4 5 55 22
2 3 1 3 5 2 4 6 8 13
3 90 99 999 9999 2 22 222 2223 10973
4 8 4 988 1004 6 15 12 78 50
> id <- t(apply(data,1,order))
> lapply(1:nrow(id),function(i)data[i,id[i,]])
[[1]]
d c f b g a e i h
1 1 2 4 5 5 7 11 22 55
[[2]]
b e a c f d g h i
2 1 2 3 3 4 5 6 8 13
[[3]]
e f a b g c h d i
3 2 22 90 99 222 999 2223 9999 10973
[[4]]
b e a g f i h c d
4 4 6 8 12 15 50 78 988 1004
> matrix(names(data)[id],ncol=ncol(data))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "d" "c" "f" "b" "g" "a" "e" "i" "h"
[2,] "b" "e" "a" "c" "f" "d" "g" "h" "i"
[3,] "e" "f" "a" "b" "g" "c" "h" "d" "i"
[4,] "b" "e" "a" "g" "f" "i" "h" "c" "d"
> criteria <- matrix(names(data)[id],ncol=ncol(data))
> data2 <- read.csv("ex2.csv",header=TRUE)
> data2
a b c d e f g h i
1 1.100000 1.13000 0.900000 1.70000 1.54500 1.220000 2.000000 1.40000 1.9800000
2 1.242300 1.64345 1.452500 2.20000 1.43240 0.234423 1.556234 1.32432 1.2342300
3 1.542542 1.35432 1.342523 1.23432 1.43254 1.324320 1.546540 2.43200 0.4321432
4 1.542354 1.65460 0.324130 0.65460 1.23452 1.654325 1.342134 0.34124 1.1000000
> rr <- order(data2,criteria)
> matrix(rr,ncol=ncol(criteria))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 22 16 5 20 28 18 3 6 33
[2,] 12 9 21 2 11 19 17 24 25
[3,] 32 1 34 23 7 10 27 8 14
[4,] 35 36 15 30 29 4 26 13 31
这是我的代码。我已将“ex”设置为索引矩阵,并将 ex2 设置为实际返回矩阵。 我想逐行重新排序'ex'升序(每行表示一周内的索引(条件)数)
然后,我的明确目标是将“matrix ex2”重新排序为“matrix ex”
我在 stackoverflow 中复制并粘贴了 lapply 代码。所以我可以像这样重新订购“矩阵前”。
> matrix(names(data)[id],ncol=ncol(data))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "d" "c" "f" "b" "g" "a" "e" "i" "h"
[2,] "b" "e" "a" "c" "f" "d" "g" "h" "i"
[3,] "e" "f" "a" "b" "g" "c" "h" "d" "i"
[4,] "b" "e" "a" "g" "f" "i" "h" "c" "d"
> rr <- order(data2,criteria)
> matrix(rr,ncol=ncol(criteria))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 22 16 5 20 28 18 3 6 33
[2,] 12 9 21 2 11 19 17 24 25
[3,] 32 1 34 23 7 10 27 8 14
[4,] 35 36 15 30 29 4 26 13 31
data 是 ex,data2 是 ex2。 d 是第 1 行中最小数字的标题(=1),h 是第 1 行中最大数字的标题(=55) 因此,我成功地使 ex 有序升序,逐行。 ex 被逐行重新排序。它是由标题呈现的。我可以通过在 Stackoverflow 上复制粘贴代码来做到这一点。
所以,我想使用 ex 的顺序重新排序 ex2。 然后,我只能得到这个结果。函数 'order' 显示矩阵 ex2 中的第 22 个数字在 ex2 中最小。
但是,我有两个问题。 第一个问题是“我想在 ex2 上逐行重新排序”。我的结果是有序的,但不是逐行排序的, 第二个问题是“我想知道 ex2 的数值,而不是排名”,我的结果是显示矩阵元素的排名。
如何使用逐行方法将 ex2 排序为 ex 的顺序?
我英语不好,对不起我的英语不好。 感谢您阅读我的问题!
【问题讨论】:
-
您好,欢迎来到 SO。你的问题有点令人困惑。显示了许多矩阵,很难遵循。也许考虑将您的问题编辑为更基本的内容:
"I have matrix 1 that is <this> and matrix 2 that is <that>. I would like to order matrix 1 by matrix 2 so that the result looks like matrix 3 <here>" -
另外,如果您按行排序,您能否定义如何确定两行之间的顺序? (即,第一行,第二行?怎么知道?)。谢谢。
标签: r