1
我有数据的矩阵:行乘以一个向量含一个不完整的索引
> matrix <- matrix(rnorm(16), ncol=4)
> matrix
[,1] [,2] [,3] [,4]
[1,] -0.9239653 0.4217107 -0.3092167 0.09732866
[2,] -0.9635737 0.3755872 -0.4033848 1.67775919
[3,] 1.1193376 -0.3618842 -1.0036277 -0.50638047
[4,] -0.2659838 -0.8215967 0.1611249 -0.05114933
我想重新为了通过在一个矢量中指定的索引的矩阵的行。如果索引中的数字对应于矩阵中的行数,这很容易:
> index <- c(3, 2, 1, 4)
> reordered.matrix <- matrix[index, ]
> reordered.matrix
[,1] [,2] [,3] [,4]
[1,] 1.1193376 -0.3618842 -1.0036277 -0.50638047
[2,] -0.9635737 0.3755872 -0.4033848 1.67775919
[3,] -0.9239653 0.4217107 -0.3092167 0.09732866
[4,] -0.2659838 -0.8215967 0.1611249 -0.05114933
但是,在现实生活中,我的索引包含一些零。这些零指定我想放弃数据的位置,即在该行中只有一行零或NAs。以下是我想获得:
> index <- c(3, 0, 1, 0)
> reordered.matrix <- matrix[index, ]
> reordered.matrix
[,1] [,2] [,3] [,4]
[1,] 1.1193376 -0.3618842 -1.0036277 -0.50638047
[2,] 0 0 0 0
[3,] -0.9239653 0.4217107 -0.3092167 0.09732866
[4,] 0 0 0 0
但不是[R忽略了零,而我只是得到:
[,1] [,2] [,3] [,4]
[1,] 1.1193376 -0.3618842 -1.0036277 -0.50638047
[2,] -0.9239653 0.4217107 -0.3092167 0.09732866
一个可能的解决办法是写一个循环,去,虽然该指数逐个复制数据并将其写入新矩阵中的正确位置。但是,我使用的矩阵非常庞大(数百万行),循环速度太慢。有没有什么办法可以在不诉诸循环的情况下获得我想要的?
谢谢Akrun,这工作。 –