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
答案 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