通过R中的4步以交替方式组合2个向量
Combining 2 vectors in alternating way by step of 4 in R
我有两个相同长度的向量:
a = c(723, 680, 2392, 2063, 721, 746, 2053, 2129)
b = c(1, 2, 3, 4, 5, 6, 7, 8)
现在我想合并它们,但步长为 4 个元素,更准确地说,我想要作为输出:
723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8
我们可以通过拆分来做到这一点。创建一个函数来创建一个 gl
的分组变量,该变量在 'n' 的块处递增(此处 n 为 4),然后将两个向量拆分为 list
,使用 Map
连接相应的 list
元素和 unlist
list
以创建 vector
f1 <- function(x, n) split(x, as.integer(gl(length(x), n, length(x))))
unlist( Map(c, f1(a, 4), f1(b, 4)), use.names = FALSE)
#[1] 723 680 2392 2063 1 2 3 4
#[9] 721 746 2053 2129 5 6 7 8
或者如果长度相同,那么我们可以 rbind
并在创建 matrix
后连接
c(rbind(matrix(a, nrow =4), matrix(b, nrow = 4)))
#[1] 723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8
这里有一些其他的基本 R 选项
- 使用
order
c(a,b)[order(c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4)))]
- 使用
split
+ unlist
unlist(
split(
c(a, b),
c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4))
),
use.names = FALSE
)
我有两个相同长度的向量:
a = c(723, 680, 2392, 2063, 721, 746, 2053, 2129)
b = c(1, 2, 3, 4, 5, 6, 7, 8)
现在我想合并它们,但步长为 4 个元素,更准确地说,我想要作为输出:
723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8
我们可以通过拆分来做到这一点。创建一个函数来创建一个 gl
的分组变量,该变量在 'n' 的块处递增(此处 n 为 4),然后将两个向量拆分为 list
,使用 Map
连接相应的 list
元素和 unlist
list
以创建 vector
f1 <- function(x, n) split(x, as.integer(gl(length(x), n, length(x))))
unlist( Map(c, f1(a, 4), f1(b, 4)), use.names = FALSE)
#[1] 723 680 2392 2063 1 2 3 4
#[9] 721 746 2053 2129 5 6 7 8
或者如果长度相同,那么我们可以 rbind
并在创建 matrix
c(rbind(matrix(a, nrow =4), matrix(b, nrow = 4)))
#[1] 723 680 2392 2063 1 2 3 4 721 746 2053 2129 5 6 7 8
这里有一些其他的基本 R 选项
- 使用
order
c(a,b)[order(c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4)))]
- 使用
split
+unlist
unlist(
split(
c(a, b),
c(2 * ceiling(seq_along(a) / 4) - 1, 2 * ceiling(seq_along(b) / 4))
),
use.names = FALSE
)