合并两个向量并获得R中的向量列表

时间:2014-04-07 13:52:13

标签: r vector

我有两个向量:

u <- c(1, 3, 5)
v <- c(2, 4, 6)

我想将其组合成一个结果res,它必须是一个二维向量列表。

是否有办法智能地执行以下操作?

res <- list(c(u[1], v[1]), c(u[1], v[2]), c(u[1], v[3]), c(u[2], v[1]) ... )

编辑这个问题,试图更好地解释我想要的东西。

2 个答案:

答案 0 :(得分:1)

你需要类似于cartesian product的矢量

> u
[1] 1 3 5
> v
[1] 2 4 6

与用户hrbrmstr解释一样,可以通过这种方式获得组合

> r = expand.grid(v, u)
> r
  Var1 Var2
1    2    1
2    4    1
3    6    1
4    2    3
5    4    3
6    6    3
7    2    5
8    4    5
9    6    5

请注意,我已切换uv以适合您的目标数据结构。 然后我选择两个列向量

> x <- r[[2]]
> y <- r[[1]]
> x
[1] 1 1 1 3 3 3 5 5 5
> y
[1] 2 4 6 2 4 6 2 4 6

及其长度

> n <- length(x)
> n
[1] 9

然后使用n元素

创建列表
> res <- vector(mode="list", length=n)

最后列表被填满:

> for (i in 1:n) {
+ res[[i]] = c(x[i], y[i])
+ }

产生

> res
[[1]]
[1] 1 2

[[2]]
[1] 1 4

[[3]]
[1] 1 6

[[4]]
[1] 3 2

[[5]]
[1] 3 4

[[6]]
[1] 3 6

[[7]]
[1] 5 2

[[8]]
[1] 5 4

[[9]]
[1] 5 6

>

也许有更快的方法,但我相信这会给你想要的数据结构。

答案 1 :(得分:0)

除非您需要位置4中的[3,2],否则您能否接受expand.grid的结果?

v1 <- c(1,3,5)
v2 <- c(2,4,6)
as.matrix(expand.grid(v1,v2))
##       Var1 Var2
##  [1,]    1    2
##  [2,]    3    2
##  [3,]    5    2
##  [4,]    1    4
##  [5,]    3    4
##  [6,]    5    4
##  [7,]    1    6
##  [8,]    3    6
##  [9,]    5    6