【发布时间】:2019-09-12 14:08:05
【问题描述】:
我想将原始矩阵的行分成两个单独的矩阵。 我将问题设置如下:
set.seed(2)
Mat1 <- data.frame(matrix(nrow = 4, ncol =10, data = rnorm(40,0,1)))
keep.rows = matrix(nrow =2, ncol =4)
keep.rows[,1] = c(1,2)
keep.rows[,2] = c(2,3)
keep.rows[,3] = c(2,3)
keep.rows[,4] = c(1,2)
Mat1
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 0.9959846 -2.2079198 -0.3869496 -1.183606 1.959357077 1.0744594 -0.8621983 -0.4213736 0.4718595 1.2309537
2 -1.6957649 1.8221225 0.3866950 -1.358457 0.007645872 0.2605978 2.0480403 -0.3508344 1.3589398 1.1471368
3 -0.5333721 -0.6533934 1.6003909 -1.512671 -0.842615198 -0.3142720 0.9399201 -1.0273806 0.5641686 0.1065980
4 -1.3722695 -0.2846812 1.6811550 -1.253105 -0.601160105 -0.7496301 2.0086871 -0.2505191 0.4559801 -0.7833167
Mat 1 是我的原始矩阵。现在从 Keep rows 矩阵,我想创建两个输出矩阵。第一个输出矩阵 (Output1) 应该存储 keep.row 中指定的所有行号。第二个输出(Output2)矩阵应该存储所有剩余的行。在我的实际应用程序中,我的矩阵非常大,因此不能像我在这里那样手动排序。
我需要: 1)我需要一个简单地在大型矩阵上执行此操作的函数。 2)理想情况下,我可以每次将条目数更改为“保留”。所以在这种情况下,我存储 3 个条目。但是,想象一下如果我的 keep.rows 矩阵是 2x2。在这种情况下,我可能希望每次存储五个条目。
结果应采用以下形式:
Output1 <- data.frame(matrix(nrow = 2, ncol =10))
Output1[1:2,1:3] <- Mat1[c(1,2), 1:3]
Output1[1:2,4:6] <- Mat1[c(2,3), 4:6]
Output1[1:2,7:9] <- Mat1[c(2,3), 7:9]
Output1[1:2,10] <- Mat1[c(1,2), 10]
Output2 <- data.frame(matrix(nrow = 2, ncol =10))
Output2[1:2,1:3] <- Mat1[c(3,4), 1:3]
Output2[1:2,4:6] <- Mat1[c(1,4), 4:6]
Output2[1:2,7:9] <- Mat1[c(1,4), 7:9]
Output2[1:2,10] <- Mat1[c(3,4), 10]
重要提示:在答案中,我需要以保留所有剩余行的方式指定输出 2。在我的应用程序中,我的 keep.row 矩阵大小相同。但是 Mat1 包含 1000 行 +
【问题讨论】:
-
也许将其视为一个序列?所以我将其解释为:lower