关于如何提取向量的每个第n个元素有很多问题,但我找不到如何在向量的每个第n个元素之后轻松添加值.有没有一种简单的方法可以在向量中的每个第n个元素之后添加某个值?
例如,假设我们有两个向量:
v1 <- paste0(letters[1:3], rep(1:5, each = 3))
> v1
[1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3" "a4" "b4" "c4" "a5" "b5" "c5"
v2 <- paste0("header", seq(1:5))
> v2
[1] "header1" "header2" "header3" "header4" "header5"
Run Code Online (Sandbox Code Playgroud)
现在我想在第一个元素的v2第三个元素之后添加元素v1.结果应如下所示:
[1] "header1" "a1" "b1" "c1" "header2" "a2" "b2" "c2" "header3" "a3" "b3" "c3" "header4" "a4" "b4" "c4" "header5" "a5" "b5" "c5"
Run Code Online (Sandbox Code Playgroud)
您可以将长向量转换为具有适当尺寸的矩阵; 将标题贴在上面; 然后使用c()将矩阵展平回矢量.
构造示例:
v1 <- paste0(letters[1:3], rep(1:5, each = 3))
v2 <- paste0("header", seq(1:5))
Run Code Online (Sandbox Code Playgroud)
制作矩阵并附上标题:
r <- rbind(v2,matrix(v1,ncol=length(v2)))
## "header1" "header2" "header3" "header4" "header5"
## "a1" "a2" "a3" "a4" "a5"
## "b1" "b2" "b3" "b4" "b5"
## "c1" "c2" "c3" "c4" "c5"
Run Code Online (Sandbox Code Playgroud)
现在压平它:
c(r)
Run Code Online (Sandbox Code Playgroud)
我们可以split使用分组变量(使用%/%)创建'v1' 来形成a list,然后c将'v2'的相应元素与listusing Map和unlist它连接起来().
unlist(Map(`c`, v2, split(v1, (seq_along(v1)-1)%/%3+1)), use.names=FALSE)
#[1] "header1" "a1" "b1" "c1" "header2" "a2" "b2"
#[8] "c2" "header3" "a3" "b3" "c3" "header4" "a4"
#[15] "b4" "c4" "header5" "a5" "b5" "c5"
Run Code Online (Sandbox Code Playgroud)
或者如果'v1'的长度是'3'的倍数,我们可以创建一个matrix'v1',cbind'v2',转置输出并转换matrix为vectorwith c.
c(t(cbind(v2,matrix(v1, ncol=3, byrow=TRUE))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |