1
私は最終的な所望の出力があるR.Rでこの単純なマージを行う方法は?
で2つのデータセット> dt_1
co_code co_stkdate bse_closing_price bse_returns
1 21042 1990-01-01 47.50 1.0440
2 21042 1990-01-02 48.75 1.0263
3 21042 1990-01-03 42.50 0.8718
4 22765 1990-01-01 37.00 1.0000
5 22765 1990-01-02 37.00 1.0000
6 22765 1990-01-03 37.00 1.0000
> dt_2
co_code co_stkdate bse_market_cap bse_pe
1 21042 1990-01-01 338.8650 10.7236
2 21042 1990-01-02 347.7825 11.0058
3 21042 1990-01-03 303.1950 9.5948
4 21042 1990-01-04 303.1950 9.5948
5 22765 1990-01-01 206.7147 6.2263
6 22765 1990-01-02 206.7147 6.2263
7 22765 1990-01-03 206.7147 6.2263
8 22765 1990-01-09 202.5246 6.1001
をマージしたい:私はマージを試みたが、それは私に希望されていない行(24)の多くを与えている
> dt_3
co_code co_stkdate bse_closing_price bse_returns bse_market_cap bse_pe
1 21042 1990-01-01 47.50 1.0440 338.8650 10.7236
2 21042 1990-01-02 48.75 1.0263 347.7825 11.0058
3 21042 1990-01-03 42.50 0.8718 303.1950 9.5948
4 21042 1990-01-04 NA NA 303.1950 9.5948
5 22765 1990-01-01 37.00 1.0000 206.7147 6.2263
6 22765 1990-01-02 37.00 1.0000 206.7147 6.2263
7 22765 1990-01-03 37.00 1.0000 206.7147 6.2263
8 22765 1990-01-09 NA NA 202.5246 6.1001
。
> merge(x = dt_1, y = dt_2, by = "co_code")
co_code co_stkdate.x bse_closing_price bse_returns co_stkdate.y bse_market_cap bse_pe
1 21042 1990-01-01 47.50 1.0440 1990-01-01 338.8650 10.7236
2 21042 1990-01-01 47.50 1.0440 1990-01-02 347.7825 11.0058
3 21042 1990-01-01 47.50 1.0440 1990-01-03 303.1950 9.5948
4 21042 1990-01-01 47.50 1.0440 1990-01-04 303.1950 9.5948
5 21042 1990-01-02 48.75 1.0263 1990-01-01 338.8650 10.7236
6 21042 1990-01-02 48.75 1.0263 1990-01-02 347.7825 11.0058
7 21042 1990-01-02 48.75 1.0263 1990-01-03 303.1950 9.5948
8 21042 1990-01-02 48.75 1.0263 1990-01-04 303.1950 9.5948
9 21042 1990-01-03 42.50 0.8718 1990-01-01 338.8650 10.7236
10 21042 1990-01-03 42.50 0.8718 1990-01-02 347.7825 11.0058
11 21042 1990-01-03 42.50 0.8718 1990-01-03 303.1950 9.5948
12 21042 1990-01-03 42.50 0.8718 1990-01-04 303.1950 9.5948
13 22765 1990-01-01 37.00 1.0000 1990-01-01 206.7147 6.2263
14 22765 1990-01-01 37.00 1.0000 1990-01-02 206.7147 6.2263
15 22765 1990-01-01 37.00 1.0000 1990-01-03 206.7147 6.2263
16 22765 1990-01-01 37.00 1.0000 1990-01-09 202.5246 6.1001
17 22765 1990-01-02 37.00 1.0000 1990-01-01 206.7147 6.2263
18 22765 1990-01-02 37.00 1.0000 1990-01-02 206.7147 6.2263
19 22765 1990-01-02 37.00 1.0000 1990-01-03 206.7147 6.2263
20 22765 1990-01-02 37.00 1.0000 1990-01-09 202.5246 6.1001
21 22765 1990-01-03 37.00 1.0000 1990-01-01 206.7147 6.2263
22 22765 1990-01-03 37.00 1.0000 1990-01-02 206.7147 6.2263
23 22765 1990-01-03 37.00 1.0000 1990-01-03 206.7147 6.2263
24 22765 1990-01-03 37.00 1.0000 1990-01-09 202.5246 6.1001
私はRをマージしています。私はいくつかのスタックオーバーフローの投稿を左の結合、外部の結合などで読んでみるが、それらのすべては私に同じ24行を与える。 How to join (merge) data frames (inner, outer, left, right)?
あなたが持っているものは、多対多の結合です。 'co_code'の各値は、他のデータセットの' co_code'のすべてのインスタンスに結合します。 'co_code 'ごとに4x3 = 12行の出力。各 'co_code'グループ内の各行に対して' time'カラムを追加し、 'by ='変数に 'time'を追加する必要があります。 – thelatemail
@thelatemail Plsはもう一度質問をして、いくつかのフィールドを編集しました。 co_codeとdateの固有の組み合わせに基づいてマージする必要があります。時間変数を追加すると、co_codeとdateの同じ組み合わせに対応する各データセットに何らかの形で同じ時間値を置くと役に立ちます。 –
日付がある場合、それは単なる1対1のマージです。 'merge(x = dt_1、y = dt_2、by = c(" co_code "、" co_stkdate ")、all = TRUE)' – thelatemail