拆分矩阵并重新加入

nrh*_*ner 5 split r matrix

这是我的第一篇文章.如果我的问题愚蠢,请提前道歉.我是编程新手.

好的,所以我matrix(eBpvalues)在R中有一个152720行和2列.我想分成10个单独的矩阵,每个矩阵包含15272行.

我试过这个:

> newmx <-split(as.data.frame(eBpvalues), rep(1:10, each = 15272)))

> summary(newmx)  

   Length Class      Mode  
1  2      data.frame list    
2  2      data.frame list  
3  2      data.frame list  
4  2      data.frame list  
5  2      data.frame list  
6  2      data.frame list  
7  2      data.frame list  
8  2      data.frame list  
9  2      data.frame list  
10 2      data.frame list  
Run Code Online (Sandbox Code Playgroud)

我如何并排连接这些矩阵,所以我有一个20列和15272行的新矩阵?

干杯,

尼尔

Rei*_*son 9

你快到了.在这些情况下经常使用的功能是do.call,它采用您想要应用的函数和要应用它的数据列表.要应用的功能是cbind结合的10个数据帧/矩阵在一起.

从字面上看,我们从适当大小的矩阵mat(eBpvalues在你的Q中)开始.转换为数据框:

mat <- matrix(rnorm(152720 * 2), ncol = 2)
df <- data.frame(mat)
Run Code Online (Sandbox Code Playgroud)

产生指标因子的简便方法是通过以下gl()功能:

ind <- gl(10, 15272)
Run Code Online (Sandbox Code Playgroud)

然后我们split()打电话给你:

newMat <- split(df, ind)
Run Code Online (Sandbox Code Playgroud)

最后一步是这样,我们do.call()在这里应用于cbind()以下数据框集newMat:

res <- do.call(cbind, newMat)
Run Code Online (Sandbox Code Playgroud)

这给了我们你想要的东西(虽然你可能需要整理列名等).

> str(res)
'data.frame':   15272 obs. of  20 variables:
 $ 1.X1 : num  -0.268 -0.8568 -0.0267 1.0894 1.5847 ...
 $ 1.X2 : num  0.71 -0.298 0.359 0.97 -2.158 ...
 $ 2.X1 : num  -0.987 -0.222 2.991 0.443 0.228 ...
 $ 2.X2 : num  -2.343 -1.023 -1.48 1.47 0.758 ...
 $ 3.X1 : num  -0.305 -0.761 0.817 1.347 0.694 ...
 $ 3.X2 : num  -0.0915 0.4816 1.4662 -1.2668 -1.3523 ...
 $ 4.X1 : num  -0.678 -1.056 1.029 -0.468 0.836 ...
 $ 4.X2 : num  -0.656 -0.459 -0.965 -1.666 0.877 ...
 $ 5.X1 : num  -0.295 -1.255 1.395 -1.985 -1.71 ...
 $ 5.X2 : num  1.141 1.177 -1.003 -0.29 -0.234 ...
 $ 6.X1 : num  -0.0548 1.8673 -1.5388 -1.1063 0.3923 ...
 $ 6.X2 : num  -1.399 0.57 0.367 -0.811 -2.434 ...
 $ 7.X1 : num  0.389 -1.058 0.61 1.102 -0.063 ...
 $ 7.X2 : num  0.854 1.251 1.095 -0.485 0.451 ...
 $ 8.X1 : num  -2.018 0.849 0.3 0.988 -1.993 ...
 $ 8.X2 : num  -1.23 -1.025 -0.546 1.674 0.588 ...
 $ 9.X1 : num  0.814 0.726 1.04 0.985 1.781 ...
 $ 9.X2 : num  -1.094 -1.051 0.749 1.426 0.402 ...
 $ 10.X1: num  0.3786 1.6131 -0.4149 0.0684 -0.815 ...
 $ 10.X2: num  0.383 -0.136 -0.751 -0.164 0.434 ...
Run Code Online (Sandbox Code Playgroud)

  • thx指向gl()的指针.我继续忘记这个功能. (2认同)