4

如果我在 R 中有一个如下所示的矩阵:

1,3
7,1
8,2

我将如何编写创建这样的矩阵的代码:

1,3
1,3
1,3
7,1
8,2
8,2

它在哪里根据正确的 .column 值重复该行?请记住,我有一个实际上比 2 行多得多的矩阵

4

3 回答 3

13
# construct your initial matrix
x <- matrix( c( 1 , 3 , 7 , 1 , 8 , 2 ) , 3 , 2 , byrow = TRUE )

# take the numbers 1 thru the number of rows..
1:nrow(x)

# repeat each of those elements this many times
x[ , 2 ]

# and place both of those inside the `rep` function
rows <- rep( 1:nrow(x) , x[ , 2 ] )

# ..then return exactly those rows!
x[ rows , ]

# or save into a new variable
y <- x[ rows , ]
于 2013-02-28T19:46:45.570 回答
8

这是您的原始矩阵:

a<-matrix(c(1,7,8,3,1,2),3,2)

这使您成为第一列:

rep(a[,1],times=a[,2])

这使您成为第二列:

rep(a[,2],times=a[,2])

将这些与 cbind 结合起来:

cbind(rep(a[,1],times=a[,2]),rep(a[,2],times=a[,2]))

     [,1] [,2]
[1,]    1    3
[2,]    1    3
[3,]    1    3
[4,]    7    1
[5,]    8    2
[6,]    8    2
于 2013-02-28T19:46:56.193 回答
0
A <- matrix( c( 1 , 3 , 7 , 1 , 8 , 2 ) , 3 , 2 , byrow = TRUE )

a<-c(3,1,2)

f<-function(i1){
 rep(A[i1,],a[i1])
}

matrix(unlist(sapply(1:3,f)),ncol=2,byrow=TRUE)
于 2017-01-13T18:19:40.610 回答