将一个列表中的每个项目与r中的另一个项目组合

时间:2014-03-12 03:26:34

标签: r matrix

我正在尝试组合两个连续数字的向量,以便生成一个矩阵,我可以从中绘制网格。特别是我的矢量分别包含经度和纬度数据,但为简单起见,我想说:      matrix(seq(1, 3, 1)) [,1] [1,] 1 [2,] 2 [3,] 3

matrix(seq(1, 3, 1)) [,1] [1,] 1 [2,] 2 [3,] 3


而我想要的只是:
[,1] [,2] [1,] 1 1 [2,] 1 2 [3,] 1 3 [4,] 2 1 [5,] 2 2 [6,] 2 3 [7,] 3 1 [8,] 3 2 [9,] 3 3
(以上是假的,实际上不是来自R)我尝试使用嵌套的for循环无济于事。这似乎太简单了,不能给我这样的麻烦。

2 个答案:

答案 0 :(得分:2)

您似乎在寻找expand.grid()

a <- 1:3
b <- 1:3

expand.grid(a=a,b=b)
#   a b
# 1 1 1
# 2 2 1
# 3 3 1
# 4 1 2
# 5 2 2
# 6 3 2
# 7 1 3
# 8 2 3
# 9 3 3

## Or perhaps, if order matters to you
rev(expand.grid(b=b,a=a))
#   a b
# 1 1 1
# 2 1 2
# 3 1 3
# 4 2 1
# 5 2 2
# 6 2 3
# 7 3 1
# 8 3 2
# 9 3 3

答案 1 :(得分:0)

您可以使用merge

执行此操作
m1 <- 1:3
m2 <- 1:3
merge(m1, m2, by=NULL)
  x y
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 1 3
8 2 3
9 3 3

使用merge的好处是,如果你有一个data.frame而不是矢量,它可以很容易地处理它:

m1<- data.frame(x=1:3, a=rnorm(3))
m2 <- data.frame(y=1:3, b=rnorm(3))
merge(m1, m2, by=NULL)
  x          a y          b
1 1 -0.6827197 1 -0.2046336
2 2 -1.5920405 1 -0.2046336
3 3  1.7696125 1 -0.2046336
4 1 -0.6827197 2  0.1738251
5 2 -1.5920405 2  0.1738251
6 3  1.7696125 2  0.1738251
7 1 -0.6827197 3  0.5166421
8 2 -1.5920405 3  0.5166421
9 3  1.7696125 3  0.5166421