我想将原始矩阵的行分成两个单独的矩阵。 我将问题设置如下:
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
垫1是我的原始矩阵。现在,从“保留行”矩阵中,我想创建两个输出矩阵。第一个输出矩阵(Output1)应该存储keep.row中指定的所有行号。第二个output(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行+
答案 0 :(得分:1)
您可以使用sapply
来对Mat1
的{{1}}列和使用seq_along(Mat1)
的子集Mat1
进行迭代。使用keep.rows
可以从返回的sapply列表中获得类似矩阵的data.frame。要获取剩余数据,您只需在cbind
之前放置-
。
keep.rows