如何在R中进行这种简单的合并?

时间:2017-11-23 04:02:48

标签: r merge

我想合并R中的两个数据集。

> 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

最终所需的输出是:

> 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

我尝试合并,但它给了我很多行(24),这是不可取的。

> 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)?

1 个答案:

答案 0 :(得分:0)

您可以尝试dplyr库合并两个数据框。

根据您是想要所有行,只是dt_1中的行和dt_2中匹配dt_1的行,还是两个帧中都存在的行,您可能会使用 - 分别为full_joinleft_join / right_joininner_join

dt_3 <- full_join(dt_1, dt_2)

由于共同的列具有相同的名称,因此您无需指定by条件。

您也可以检查语法here