我有如下所示的矩阵
> m
m-1 m-2 m-3 m-4
1 143.7622 136.5459 150.2471 0.0000
2 154.5759 157.7273 0.0000 0.0000
3 120.0844 0.0000 0.0000 0.0000
4 152.4461 0.0000 0.0000 0.0000
5 0.0000 0.0000 0.0000 0.0000
6 138.0643 123.9677 137.8788 152.7869
7 137.8872 0.0000 0.0000 0.0000
8 154.3439 140.1487 151.1158 154.8959
9 136.0983 139.3603 123.1054 0.0000
10 142.1830 0.0000 0.0000 0.0000我需要在不影响矩阵中零点位置的情况下对行进行排序。例如,按升序排序后,第一行应类似于
m-1 m-2 m-3 m-4
136.5459 143.7622 150.2471 0.0000有人能帮我解决这个问题吗?
发布于 2020-10-15 03:37:55
您可以按行方式使用apply,忽略0,只对非0元素进行排序。
t(apply(m, 1, function(x) {x[x != 0] <- sort(x[x != 0]);x}))
# m-1 m-2 m-3 m-4
#1 136.5459 143.7622 150.2471 0.0000
#2 154.5759 157.7273 0.0000 0.0000
#3 120.0844 0.0000 0.0000 0.0000
#4 152.4461 0.0000 0.0000 0.0000
#5 0.0000 0.0000 0.0000 0.0000
#6 123.9677 137.8788 138.0643 152.7869
#7 137.8872 0.0000 0.0000 0.0000
#8 140.1487 151.1158 154.3439 154.8959
#9 123.1054 136.0983 139.3603 0.0000
#10 142.1830 0.0000 0.0000 0.0000数据
m <- structure(c(143.7622, 154.5759, 120.0844, 152.4461, 0, 138.0643,
137.8872, 154.3439, 136.0983, 142.183, 136.5459, 157.7273, 0,
0, 0, 123.9677, 0, 140.1487, 139.3603, 0, 150.2471, 0, 0, 0,
0, 137.8788, 0, 151.1158, 123.1054, 0, 0, 0, 0, 0, 0, 152.7869,
0, 154.8959, 0, 0), .Dim = c(10L, 4L), .Dimnames = list(c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"), c("m-1", "m-2",
"m-3", "m-4")))https://stackoverflow.com/questions/64364474
复制相似问题