[英]Merge two vectors and get a list of vector in R
我有兩個向量:
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]) ... )
編輯了問題,試圖更好地解釋我想要的。
您需要類似矢量的笛卡爾積
> 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
請注意,我切換了u
和v
以適合您的目標數據結構。 然后我選擇兩個列向量
> 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
>
也許有一種更快的方法,但是我相信這可以提供您想要的數據結構。
除非您* 需要位置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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.