在R中,避免在合并具有相同列名的两个数据表时重复使用未键入的cols?

时间:2015-03-30 11:06:22

标签: r merge data.table

请帮助初学者提高对基本问题的惊人data.table包的理解。

我想更新数据表 dt,其中包含相同结构和列名 dt2的新信息片段,自动收报机/日期/ 价钱。关键是自动收报机和日期。

  1. 我知道可以使用rbind(dt, dt2) looking herehere,但我不想冒复制品,所以请考虑通过合并加入它们。

  2. 我期待 merge(dt, dt2, all = TRUE) 来做这个伎俩。

    但是你得到 x.price y.price 而不是一个价格专栏!?

    为什么dt与2中的共享列不匹配?数据框文档暗示他们使用名称的交叉,但DT似乎不同。

  3. 目前,我正在使用 by = colnames(dt) merge(dt, dt2, all = TRUE, by = colnames(dt))来解决这个问题,但这是正确的做法吗?

  4. 谢谢,我希望得到一些指导/确认(并且不需要借助其他套餐)。

    示例代码

    library(data.table)
    # Main data
    dt <- data.table(ticker = c("A", "A"), 
                     date   = c("Jan", "Feb"),
                     price  = c(10, 11),
                     key    = c("ticker", "date"))
    
    # Update data with same column names
    dt2 <- data.table(ticker = c("A", "B"), 
                      date   = c("Mar", "Mar"),
                      price  = c(12, 100),
                      key    = c("ticker", "date"))
    
    # Lets put them together
    merge(dt, dt2, all = TRUE)
    # but get 4 x 4 back (not 4 x 3) with price.x price.y ???
    
        ticker date price.x price.y
    1:      A  Feb      11      NA
    2:      A  Jan      10      NA
    3:      A  Mar      NA      12
    4:      B  Mar      NA     100
    
    # This works, but am I missing easier syntax?
    merge(dt, dt2, all = TRUE, by = colnames(dt2))
    
       ticker date price
    1:      A  Feb    11
    2:      A  Jan    10
    3:      A  Mar    12
    4:      B  Mar   100
    

    (旁白)R中更好的做法是明确并指定merge.data.table吗?

0 个答案:

没有答案