合并矩阵元素
Combine matrix elements
我希望从大小为 m * n 的矩阵中获取元素的所有组合。
示例:
1 3 5
2 6 7
预期输出:
2 , 1
2 , 3
2 , 5
6 , 1
6 , 3
6 , 5
7 , 1
7 , 3
7 , 5
规则:
- 每个组合都从矩阵的底部开始,向顶部进行。不过它可能会切换列。
- 每个组合的元素数应等于行数。
- 组合中同一行的元素不能出现两次。
- 列数和行数可能会有所不同。所以解决方案必须是通用的。
我试过这样做但没有得到确切的结果
m <- rbind(c(1, 3, 5), c(2, 6, 7))
do.call(expand.grid, split(m, rep(nrow(m):1, ncol(m))))
方法很多,
do.call(
rbind,lapply(m[2,], function(x){ cbind(x, c(m[1,])) })
)
数据:
m<-
structure(c(1L, 2L, 3L, 6L, 5L, 7L), .Dim = 2:3, .Dimnames = list(
NULL, c("V1", "V2", "V3")))
结果:
# x
#V1 2 1
#V2 2 3
#V3 2 5
#V1 6 1
#V2 6 3
#V3 6 5
#V1 7 1
#V2 7 3
#V3 7 5
一般解决方案:
do.call(
rbind,lapply(m[nrow(m),], function(x){ cbind(x, c(m[-nrow(m),])) })
)
我希望从大小为 m * n 的矩阵中获取元素的所有组合。
示例:
1 3 5
2 6 7
预期输出:
2 , 1
2 , 3
2 , 5
6 , 1
6 , 3
6 , 5
7 , 1
7 , 3
7 , 5
规则:
- 每个组合都从矩阵的底部开始,向顶部进行。不过它可能会切换列。
- 每个组合的元素数应等于行数。
- 组合中同一行的元素不能出现两次。
- 列数和行数可能会有所不同。所以解决方案必须是通用的。
我试过这样做但没有得到确切的结果
m <- rbind(c(1, 3, 5), c(2, 6, 7))
do.call(expand.grid, split(m, rep(nrow(m):1, ncol(m))))
方法很多,
do.call(
rbind,lapply(m[2,], function(x){ cbind(x, c(m[1,])) })
)
数据:
m<-
structure(c(1L, 2L, 3L, 6L, 5L, 7L), .Dim = 2:3, .Dimnames = list(
NULL, c("V1", "V2", "V3")))
结果:
# x
#V1 2 1
#V2 2 3
#V3 2 5
#V1 6 1
#V2 6 3
#V3 6 5
#V1 7 1
#V2 7 3
#V3 7 5
一般解决方案:
do.call(
rbind,lapply(m[nrow(m),], function(x){ cbind(x, c(m[-nrow(m),])) })
)