2016-06-15 11 views
0

他columsの一意の値によって別のものに1つのデータフレームから列マッチング:新しいは、私は2つのデータフレームを有する

>old 
response RT sNumber blockNo 
tiger  170  1  1 
tornado  36  1  2 
tiger  43  1  3 
squire  34  2  1 
tiger  48  2  2 
tornado  49  2  3 
tornado  45  3  1 
mouse  66  3  2 
tiger  75  3  3 

>new 
response sNumber blockNo 
tiger    1  1 
tornado   1  2 
squire   2  1 
tiger    2  2 
tornado   3  1 
mouse    3  2 
tiger    3  3 

少数のRAWがあります。私は古いからRT列をコピーして、独自のsNumberblockNoに対応RTの正しい値を保つことによって新しい応答により列をマッピングを実行します。しかし、

for(wrd in unique(old$response)){ 
    new$RT[new$response == wrd] <- old$RT[old$response == wrd] 
    } 

それがために確認せずに連続してそれらまで追加されるため、この特定のケースでは、すべてのRT値を台無しに:私はこのループを使用するマッピングのための通常

>new2 
response RT sNumber blockNo 
tiger  170  1  1 
tornado  36  1  2 
squire  34  2  1 
tiger  48  2  2 
tornado  45  3  1 
mouse  66  3  2 
tiger  75  3  3 

:それは次のようになります。ユニークブロック番号およびsNumber。私が記述した方法でRTのマッピングをどのように実行すればよいですか?

+0

'plyr'パッケージの' mapvalues'関数をチェックしてください – mrp

答えて

3

2つのdata.framesの複数の列の値を一致させ、あるデータを別のデータに追加するには、mergeを使用できます。

merge(old, new, by = c("response", "sNumber", "blockNo"), all = FALSE) 
    response sNumber blockNo RT 
1 mouse  3  2 66 
2 squire  2  1 34 
3 tiger  1  1 170 
4 tiger  2  2 48 
5 tiger  3  3 75 
6 tornado  1  2 36 
7 tornado  3  1 45 

data.frames間by=引数の試合で指定されたすべての名前の列の値ならばこれがチェックされます。それらがすべて一致すると、いずれかのdata.frameの追加の列がマージされたデータに追加されます。

引数は、結果のデータに2つのdata.framesの間で選択された列に一致する行のみを含めるかどうかを制御します(デフォルト)。 all = TRUEの場合、マージされたdata.frameにはdata.framesにあるすべての行が含まれます。

+0

all引数は自動的にFALSEに設定されています。 – lmo

+1

@lmoはい、しかし、私はそれがより良い問題に対処するために指定する必要があると感じました。 – nya

+1

これをテキストのように説明すると、「デフォルトではFALSEに設定されたすべての引数があります。これがこの状況で必要なものです...他の状況では、設定できます両方のdata.framesからすべての観測値を取得するにはTRUEにします。 – lmo

関連する問題