首页 文章

R - 合并2个数据帧,其中一列不同

提问于
浏览
0

我有2个相等列大小为5的数据帧 . 前4列名称相同,最后一列不同 . 我在最后一列中报告值(T),表明各个数据帧中的每个平均值和西格玛都有异常值 .

My first data frame - df1

TimeStamp <- c("2015-04-01 11:40:13", "2015-04-03 02:54:45")
    ID <- c("DL1X8", "DL202")
    Avg <- c(38.1517, 0.7131)
    Sig <- c(11.45880000, 0.01257816)
    Outlier_Avg <- c("T","T")
    df1 <- data.frame(TimeStamp, ID, Avg, Sig,Outlier_Avg)


    +---------------------+-------+---------+-------------+-------------+
    |      TimeStamp      |  ID   |   Avg   |     Sig     | Outlier_Avg |
    +---------------------+-------+---------+-------------+-------------+
    | 2015-04-01 11:40:13 | DL1X8 | 38.1517 | 11.45880000 | T           |
    | 2015-04-03 02:54:45 | DL202 | 0.7131  | 0.01257816  | T           |
    +---------------------+-------+---------+-------------+-------------+

My Second data frame - df2

TimeStamp <- c("2015-04-01 11:40:13", "2015-04-04 02:57:45", "2015-04-06 09:54:45")
ID <- c("DL1X8", "DP308","DM3X8")
Avg <- c(38.1517, 24.7131, 0.0234)
Sig <- c(11.4588, 6.0175,0.0665)
Outlier_Sig <- c("T","T","T")
df2 <- data.frame(TimeStamp, ID, Avg, Sig,Outlier_Sig)
+---------------------+-------+---------+---------+-------------+
|      TimeStamp      |  ID   |   Avg   |   Sig   | Outlier_Sig |
+---------------------+-------+---------+---------+-------------+
| 2015-04-01 11:40:13 | DL1X8 | 38.1517 | 11.4588 | T           |
| 2015-04-04 02:57:45 | DP308 | 24.7131 | 6.0175  | T           |
| 2015-04-06 09:54:45 | DM3X8 | 0.0234  | 0.0665  | T           |
+---------------------+-------+---------+---------+-------------+

Desired Output:

我试图得到一个看起来像这样的df3

+---------------------+-------+---------+-------------+-------------+-------------+
|      TimeStamp      |  ID   |   Avg   |     Sig     | Outlier_Avg | Outlier_Sig |
+---------------------+-------+---------+-------------+-------------+-------------+
| 2015-04-01 11:40:13 | DL1X8 | 38.1517 | 11.45880000 | T           | T           |
| 2015-04-03 02:54:45 | DL202 | 0.7131  | 0.01257816  | T           | N/A         |
| 2015-04-04 02:57:45 | DP308 | 24.7131 | 6.0175      | N/A         | T           |
| 2015-04-06 09:54:45 | DM3X8 | 0.0234  | 0.0665      | N/A         | T           |
+---------------------+-------+---------+-------------+-------------+-------------+

我尝试使用merge(df1,df2) . 它仅返回匹配的行,因此只返回1行 . 我需要返回所有行并放入N / A,如上所示 . 你能帮我这个吗?

1 回答

  • 3

    使用 all 参数:

    merge(df1, df2, all = TRUE)
    #             TimeStamp    ID     Avg         Sig Outlier_Avg Outlier_Sig
    # 1 2015-04-01 11:40:13 DL1X8 38.1517 11.45880000           T           T
    # 2 2015-04-03 02:54:45 DL202  0.7131  0.01257816           T        <NA>
    # 3 2015-04-04 02:57:45 DP308 24.7131  6.01750000        <NA>           T
    # 4 2015-04-06 09:54:45 DM3X8  0.0234  0.06650000        <NA>           T
    

    这是使用 all.x = TRUEall.y = TRUE 的简写,它们是单独的参数,可以让您控制合并的data.frame中包含x(在您的情况下为 df1 )和y(在您的情况下为 df2 )中的哪些观察 . 例如,见:

    merge(df1, df2, all.x = TRUE)
    #             TimeStamp    ID     Avg         Sig Outlier_Avg Outlier_Sig
    # 1 2015-04-01 11:40:13 DL1X8 38.1517 11.45880000           T           T
    # 2 2015-04-03 02:54:45 DL202  0.7131  0.01257816           T        <NA>
    
    merge(df1, df2, all.y = TRUE)
    #             TimeStamp    ID     Avg     Sig Outlier_Avg Outlier_Sig
    # 1 2015-04-01 11:40:13 DL1X8 38.1517 11.4588           T           T
    # 2 2015-04-04 02:57:45 DP308 24.7131  6.0175        <NA>           T
    # 3 2015-04-06 09:54:45 DM3X8  0.0234  0.0665        <NA>           T
    

相关问题