タイトルは複雑ですが、ここで私が達成しようとしていることの簡単な例を示します。
_d <- data.frame(v1 = c(1,2,3,4,5,6,7,8),
v2 = c("A","E","C","B","B","C","A","E"))
m <- data.frame(v3 = c("D","E","A","C","D","B"),
v4 = c("d","e","a","c","d","b"))
_
_d$v2
_の値は、_m$v4
_の_d$v2
_の値と一致させることにより、_m$v3
_の値に置き換える必要があります
結果のデータフレームd
は次のようになります。
_v1 v4
1 a
2 e
3 c
4 b
5 b
6 c
7 a
8 e
_
私は別のものを試しました、そして私が来た最も近いものは:d$v2 <- m$v4[which(m$v3 %in% d$v2)]
もう一度forループを避けようとします!可能でなければなりません:-)どういうわけか...;)
あなたは試すことができます:
merge(d,m, by.x="v2", by.y="v3")
v2 v1 v4
1 A 1 a
2 A 7 a
3 B 4 b
4 B 5 b
5 C 3 c
6 C 6 c
7 E 2 e
8 E 8 e
順序を維持するための別のアプローチを次に示します。
data.frame(v1=d$v1, v4=m[match(d$v2, m$v3), 2])
v1 v4
1 1 a
2 2 e
3 3 c
4 4 b
5 5 b
6 6 c
7 7 a
8 8 e
標準の左結合を使用できます。
データの読み込み:
d <- data.frame(v1 = c(1,2,3,4,5,6,7,8), v2 = c("A","E","C","B","B","C","A","E"), stringsAsFactors=F)
m <- data.frame(v3 = c("D","E","A","C","D","B"), v4 = c("d","e","a","c","d","b"), stringsAsFactors=F)
列「v2」で結合できるように列名を変更する
colnames(m) <- c("v2", "v4")
Data.frame dの順序を結合して維持する
library(dplyr)
left_join(d, m)
出力:
v1 v2 v4
1 1 A a
2 2 E e
3 3 C c
4 4 B b
5 5 B b
6 6 C c
7 7 A a
8 8 E e
これにより、必要な出力が得られます。
_d$v2 <- m$v4[match(d$v2, m$v3)]
_
match関数は、m_matrixのv3列から、一致する_d$v2
_の値の位置を返します。 (match()
を使用して)インデックスを取得したら、それらのインデックスを使用して_m$v4
_から要素にアクセスし、dマトリックスの列v2の要素を置き換えます。