虽然我在这里看到许多合并的答案,但我正在尝试对两个表共有的数据进行时间序列合并。
#Simple example
d1 <- data.table(date = as.Date(c("2018-07-03", "2018-07-05")), x = c(1, 3), y = c(1, 2))
d2 <- data.table(date = as.Date("2018-07-04"), x = 2, z = 5)
setkey(d1, date)
setkey(d2, date)
我想将各列合并在一起。当我进行合并时,我会得到:
xx <- merge(d1, d2, all = TRUE)
# date x.x y x.y z
# 1: 2018-07-03 1 1 NA NA
# 2: 2018-07-04 NA NA 2 5
# 3: 2018-07-05 3 2 NA NA
我不想重复x.x和x.y列。我想要的是这个
xx2 <- rbind(d1,d2, fill = TRUE)[order(date)]
# date x y z
# 1: 2018-07-03 1 1 NA
# 2: 2018-07-04 2 NA 5
# 3: 2018-07-05 3 2 NA
我想对非常大的数据集执行此操作。有没有更好的方法来进行此合并,或者正在做rbind
,然后再进行最佳排序?
答案 0 :(得分:2)
在setkey
和date
上仅x
:
d1 <- data.table(date = as.Date(c("2018-07-03", "2018-07-05")), x = c(1, 3), y = c(1, 2))
d2 <- data.table(date = as.Date("2018-07-04"), x = 2, z = 5)
setkey(d1, date, x)
setkey(d2, date, x)
xx <- merge(d1, d2, all = TRUE)
> xx
date x y z
1: 2018-07-03 1 1 NA
2: 2018-07-04 2 NA 5
3: 2018-07-05 3 2 NA
答案 1 :(得分:1)
这对我有用,无需设置按键:
library(data.table) # version 1.11.4 used
d1 <- data.table(date = as.Date(c("2018-07-03", "2018-07-05")), x = c(1, 3), y = c(1, 2))
d2 <- data.table(date = as.Date("2018-07-04"), x = 2, z = 5)
merge(d1, d2, all = TRUE)
date x y z 1: 2018-07-03 1 1 NA 2: 2018-07-04 2 NA 5 3: 2018-07-05 3 2 NA
作为rbind(d1, d2, fill = TRUE)[order(date)]
的替代方法,您可以尝试
rbindlist(list(d1, d2), fill = TRUE)[order(date)]
以data.tables列表作为第一个参数。