2016-04-22 8 views
2

ベクトルの要素を2番目のベクトル全体で置き換えたい。条件は、第1のベクトルの置き換えられた要素は第3のベクトルに等しい。次に例を示します。ベクトルの要素をベクトルで置換するR

a <- 1:10 
b <- 5:7 
v <- rnorm(2, mean = 1, sd = 5) 

私の出力が

c(a[1:4], v, a[8:10]) 

する必要があります私はすでにが、ほとんど成功し

replace(a, a == b, v) 
a[a == b] <- v 

を試してみました。誰も助けることができますか?

答えて

1

==オペレータは最高の同じ長さのベクトルを一致させるために使用され、またはベクトルの一つが唯一の長さであるとき、1

これを試してみて、そしてどちらの場合は通知があなたが望む位置の一致を得るのですか。

> a == b 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
Warning message: 
In a == b : longer object length is not a multiple of shorter object length 
> b == a 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
Warning message: 
In b == a : longer object length is not a multiple of shorter object length 

代わりに、match()を使用する - これはあなたのマッチが値であり、インデックスの位置を与えます。

そして
> match(b, a) 
[1] 5 6 7 

a <- 1:10 
b <- 5:7 
v <- rnorm(3, mean=1, sd=5) 

a[match(b, a)] <- v 

結果:

a 
[1] 1.0000000 2.0000000 3.0000000 4.0000000 -4.6843669 0.9014578 -0.7601413 8.0000000 
[9] 9.0000000 10.0000000 
1

ここに別のオプション:

a[a %in% b] <- v 

OPで説明した例では、共通の3つが存在するのでベクトル内の数字abの場合v <- rnorm(2, mean = 1, sd = 5) には2つの数字しか含まれていないため、ベクトルvはリサイクルされ、警告が表示されます。

警告及びリサイクルv

v <- rnorm(sum(a %in% b), mean = 1, sd = 5) 

としてを定義することによって、例えば、防止することができます
関連する問題