2015-10-07 100 views
3

我有两个向量(1,2,3,4,5,6,7,8)(543,544,545) 我想将放第二个到第一个从第三位置开始的,所以结果(1,2,543,544,545,6,7,8)把矢量作为子矢量到另一个向量R

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

回答

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()之前。

如果你想替换值,而不是追加新的,你应该弗兰克的解决方案去

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

或手动

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

它修改x而不是创建新载体。

+0

Martin,这两个选项都没有给出欲望输出,这个想法是用(543,544,545)替换(3,4,5),而不是插入第二个向量。 –

+0

然后这应该在问题中明确;) –

+0

同意,但在他的防守他把期望的输出在第二行 –

4

这是另一种方式。你会得到你想要使用的矢量的长度,在我的方法中是y。然后,您可以指示向量中的特定位置(即,x),以替换该向量的一部分。在这种情况下,您需要告知x(即x[c(3:(3+z))])中第3个位置需要多少个头寸。您在x的指定位置分配y

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 
+0

Fwiw,OP给第二个vec命名了'r',而不是'y'。 – Frank

+0

这似乎是最简单的方法。基本上它只是'x [3:5] < - r' –

+0

@Frank谢谢你的提示。 :) – jazzurro