合并两个数据集与数据表但保留一个相同的列

时间:2018-05-10 16:03:09

标签: data.table

还没有找到这个,所以我们走了。 我正在使用数据表,我想合并两个长度不同的表。 Ich已经成功地做到了。

所以基本上我把我的table1中我的键属性“Name,Date1”的所有行合并到我的表2中的关键属性“Name,Date2”。

我得到的问题是,我的桌子2中的Date2消失了。 我不喜欢那个。我想把我的日期2保留在表2中。

示例:

表1

Name   Date1
A      2018-01-01
A      2018-01-02
A      2018-01-03

表2

Name   Date2
A      2018-01-01
A      2018-01-02
A      2018-01-15

而不是在我的

中看起来像这样

新表

Name   Date
A      2018-01-01
A      2018-01-02
A      NA

它看起来应该是这样的

Name   Date1         Date2
A      2018-01-01    2018-01-01
A      2018-01-02    2018-01-02
A      NA            NA

有人知道这个伎俩吗? 谢谢:))

1 个答案:

答案 0 :(得分:0)

以下是sqldf解决方案:

library(sqldf)

sqldf('select a.Name, 
              case when b.Date2 is NULL 
                   then a.Date1 = NULL
                   else a.Date1 
              end as Date1 
              ,b.Date2 
      from df1 as a 
      left join df2 as b
      on a.Name = b.Name and
         a.Date1 = b.Date2')

<强>结果:

  Name      Date1      Date2
1    A 2018-01-01 2018-01-01
2    A 2018-01-02 2018-01-02
3    A       <NA>       <NA>

数据:

df1 = structure(list(Name = structure(c(1L, 1L, 1L), .Label = "A", class = "factor"), 
    Date1 = structure(1:3, .Label = c("2018-01-01", "2018-01-02", 
    "2018-01-03"), class = "factor")), .Names = c("Name", "Date1"
), class = "data.frame", row.names = c(NA, -3L))

df2 = structure(list(Name = structure(c(1L, 1L, 1L), .Label = "A", class = "factor"), 
    Date2 = structure(1:3, .Label = c("2018-01-01", "2018-01-02", 
    "2018-01-15"), class = "factor")), .Names = c("Name", "Date2"
), class = "data.frame", row.names = c(NA, -3L))