将一个向量作为子向量放入另一个向量R中

3

我有两个向量 (1,2,3,4,5,6,7,8)(543,544,545) 我想将第二个向量从第三个位置开始插入到第一个向量中,结果为 (1,2,543,544,545,6,7,8)

x <- c(1:8)
r <- c(543:545)

# I tried 
replace(x,3,r)

# or like
replace(3:length(r),1,r)

但是它没有起作用。

2
如果你阅读?replace的帮助文档,你会发现replace(x, 2+1:length(r), r)是有效的。 - Frank
2个回答

10

最简单的方法是使用c()

x <- 1:8
r <- c(543,544,545)
c(x[1:2], r ,x[3:length(x)])

另一种选项是使用 append()

append(x, values=r, after=2)

现在使用的代码和之前使用 c() 函数时做的一模一样。

如果不是想追加新的数值而是替换已有的数值,那么应该选择 Frank 的解决方案。

replace(x, list=2+1:length(r), r)

或手动

x[2+1:length(r)] <- r

此操作修改x而非创建新向量。


马丁,这两个选项都没有给出期望的输出,想法是将(3,4,5)替换为(543,544,545),而不是插入第二个向量。 - Gwenaël Gouérou
同意,但是为他辩护的是,他把期望的输出放在了第二行。 - Gwenaël Gouérou
1
保持 x 不变的类似物是 \[<-`(x, 2+1:length(r), r)`,但那太丑了。 - Frank
无论如何都值得一提 :) - Martin Schmelzer
追加解决方案对我来说是新的。+1 - jazzurro

4
这里是另一种方法。您可以获取您想要使用的向量的长度,即我的方法中的y。然后,您指定向量中的特定位置(即x),以便替换向量的一部分。在这种情况下,您需要告诉从x的第3个位置开始有多少个位置(即x[c(3:(3+z))])。您将y赋值给x中指定的位置。
x <- 1:8
y <- 543:545

z <- length(y)-1

x[c(3:(3+z))] <- y

#x
#[1]   1   2 543 544 545   6   7   8

就此而言,原帖将第二个向量命名为 r,而非 y - Frank
这似乎是最简单的方法。本质上,它只是 x[3:5] <- r - Dan Lewer
@Frank 谢谢你的留言。 :) - jazzurro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接