将矢量组合并形成12×2矩阵

时间:2016-04-22 23:50:27

标签: r

a <- c(20,30,40,50)
b <- c(1,2,3,1,2,3,1,2,3,1,2,3)

对于上述向量,我想将向量“a”中的每个值与“b”中的每个元素“b”1值组合,形成一个12x2矩阵。

期望的结果:

       x y
 [1,] 20 1
 [2,] NA 2
 [3,] NA 3
 [4,] 30 1
 [5,] NA 2
 [6,] NA 3
 [7,] 40 1
 [8,] NA 2
 [9,] NA 3
[10,] 50 1
[11,] NA 2
[12,] NA 3

2 个答案:

答案 0 :(得分:1)

您希望将a中的值与b等于1的值相匹配。

这是我的想法。创建NA的向量,并将b == 1的索引替换为a的值。然后创建矩阵。

matrix(
    c(replace(NA_real_[seq_along(b)], b == 1, a), b), 
    ncol = 2, 
    dimnames = list(NULL, c("x", "y"))
)
#        x y
#  [1,] 20 1
#  [2,] NA 2
#  [3,] NA 3
#  [4,] 30 1
#  [5,] NA 2
#  [6,] NA 3
#  [7,] 40 1
#  [8,] NA 2
#  [9,] NA 3
# [10,] 50 1
# [11,] NA 2
# [12,] NA 3

答案 1 :(得分:0)

您可以创建x值等于NA的目标矩阵,然后从a替换所需的条目:

mb <- cbind(x=NA, y=b)
mb[mb[,'y'] ==1, 'x'] <- a
mb
##        x y
##  [1,] 20 1
##  [2,] NA 2
##  [3,] NA 3
##  [4,] 30 1
##  [5,] NA 2
##  [6,] NA 3
##  [7,] 40 1
##  [8,] NA 2
##  [9,] NA 3
## [10,] 50 1
## [11,] NA 2
## [12,] NA 3