r - 在R中重新排列矩阵的行
问题描述
我在 R 中创建了以下矩阵
P = as.matrix(expand.grid(0:1, 0:1, 0:1, 0:1))
P = P[-1,]
Var1 Var2 Var3 Var4
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 1 1 0 0
[4,] 0 0 1 0
[5,] 1 0 1 0
[6,] 0 1 1 0
[7,] 1 1 1 0
[8,] 0 0 0 1
[9,] 1 0 0 1
[10,] 0 1 0 1
[11,] 1 1 0 1
[12,] 0 0 1 1
[13,] 1 0 1 1
[14,] 0 1 1 1
[15,] 1 1 1 1
有没有办法安排行P
并获得以下内容?
P = matrix(c(1,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0),10,4,byrow=TRUE)
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 0 1 1 1
[3,] 0 0 1 1
[4,] 0 0 0 1
[5,] 1 1 1 0
[6,] 0 1 1 0
[7,] 0 0 1 0
[8,] 1 1 0 0
[9,] 0 1 0 0
[10,] 1 0 0 0
以一般的方式?即,如果我增加列P
,as.matrix(expand.grid(0:1, 0:1, 0:1, 0:1, 0:1, 0:1))
我想进行等效的重新排列。
解决方案
您可以尝试使用以下方法直接创建所需的矩阵:
fun <- function(nc = 4) {
out <- lapply(rev(seq.int(nc)), function(x) {
a <- matrix(1L, ncol = x, nrow = x)
a[lower.tri(a)] <- 0L
if (x == nc) {
a
} else {
b <- matrix(0L, ncol = nc - x, nrow = nrow(a))
cbind(a, b)
}
})
do.call(rbind, out)
}
fun(4)
# [,1] [,2] [,3] [,4]
# [1,] 1 1 1 1
# [2,] 0 1 1 1
# [3,] 0 0 1 1
# [4,] 0 0 0 1
# [5,] 1 1 1 0
# [6,] 0 1 1 0
# [7,] 0 0 1 0
# [8,] 1 1 0 0
# [9,] 0 1 0 0
# [10,] 1 0 0 0
推荐阅读
- telegram - Telegram bot 可以检测到新成员加入频道事件吗?
- java - 关闭钩子关闭的焊接 SE 不执行 @PreDestroy
- gcc - 为什么在 stm32f7 上分配地址偏移会出错?
- php - 数组中的日期排序
- reactjs - 在反应中获取和显示文件
- unit-testing - 与 `throwsA` 一起使用时,`TypeMatcher` 不起作用
- mariadb - 从 XAMPP InnoDB 启动 MySQL 时出错
- json - 控制器响应奇怪的行为
- android - RecyclerView 提供淡入淡出动画,当项目被添加,默认删除?
- jquery - 访问同一视图但使用路由对象时找不到数据表函数