2017-10-23 18 views
-3

ケース数は同じですが、変数数は同じですが、2つのデータセットがあります。例えば、この:別のデータセットのインデックス変数に基づく変数値の置換

test_data <- data.frame(
    var_1 = rep(1, 10), 
    index = letters[1:10] 
) 

other_data <- data.frame(
    var_1 = c(1, 1, 3, 4, 6, 1), 
    index = letters[1:6] 
) 

そして、何私は必要はother_datavar_1の値でtest_datavar_1の値を交換することです。だから、最終的な結果は次のようになります。

> test_data 
    var_1 index 
1  1  a 
2  1  b 
3  3  c 
4  4  d 
5  6  e 
6  1  f 
7  1  g 
8  1  h 
9  1  i 
10  1  j 

私はdplyrは、リレーショナルデータで動作するように素敵であることを知っているが、私はそれが私のためにそれを行うだろう_join機能の一つだかどうかを把握することはできません、または何か違います?ありがとう。

答えて

-1

を。

test_data$var_1=other_data$var_1[match(test_data$index, other_data$index)] 
test_data[is.na(test_data)] = 1 

    var_1 index 
1  1  a 
2  1  b 
3  3  c 
4  4  d 
5  6  e 
6  1  f 
7  1  g 
8  1  h 
9  1  i 
10  1  j 

これはother_dataからvar_1の値を取得するには、その後、結果の値でtest_dataから列var_1に置き換えられますindex下の値と一致します。

NAのはtest_dataindex欄に」原因が生成されますがother_dataindexよりも要因(文字)です。そこで、NAの値を1に置き換えます。

希望します。

+0

var_1は1で満たされていないものは何ですか?異なる数字ですか? – Robert

+0

ええ、私は私の質問で明確にしてはいけないと思う - '1'はプレースホルダー、実際には多くの異なる数字があります。 – Zlo

-1

あなたはマージ使用することができます:基本Rとmatchを使用して :ちょうど別の答えを追加する

merged <- merge(test_data, other_data, by = c('index'), all.x = TRUE) 
merged$var <- ifelse(is.na(merged$var_1.y) , merged$var_1.x, merged$var_1.y) 
merged[ , c('var', 'index')] 
    var index 
1 1  a 
2 1  b 
3 3  c 
4 4  d 
5 6  e 
6 1  f 
7 1  g 
8 1  h 
9 1  i 
10 1  j 
関連する問題