Updating data.table by inserting new rows that are different from old rows

前端 未结 3 450
面向向阳花
面向向阳花 2021-01-22 22:52

I have two data.table(dt1 & dt2). dt1 is past product data and dt2 is present product data. I want to create a third data.table that inserts new rows from dt2 into dt1 only

相关标签:
3条回答
  • 2021-01-22 23:31

    You can stack and uniqify:

    unique(rbind(dt1, dt2), by=c("Product", "Level", "Color"))
    
    0 讨论(0)
  • 2021-01-22 23:41

    Another alternative is to only rbind the subset of the data which is different (avoids the creation of one big data.table which contains dt1 and dt2)

    dt3 <- rbind(dt1, setDT(dt2)[!dt1, on=c("Product", "Level", "Color")])
    dt3[order(Product, ReviewDate),]
    
    0 讨论(0)
  • 2021-01-22 23:43

    Using merge...

    d<-merge(dt1, dt2, by=c("Product","Level","Color"), all.x=T,all.y=TRUE)
    d$ReviewDate <-ifelse(is.na(d$ReviewDate.x), d$ReviewDate.y, d$ReviewDate.x)
    as.data.frame(select(d, 1,2,3,6))
    
       Product Level  Color ReviewDate
    1       A     0   Blue   9/7/2016
    2       A     1  Black   9/8/2016
    3       B     1    Red   9/7/2016
    4       C     1 Purple   9/7/2016
    5       C     5  White   9/8/2016
    6       D     2   Blue   9/7/2016
    7       E     1  Green   9/7/2016
    8       F     4 Yellow   9/7/2016
    9       G     3 Orange   9/8/2016
    
    0 讨论(0)
提交回复
热议问题