请帮助初学者提高对基本问题的惊人data.table包的理解。
我想更新数据表 dt
,其中包含相同结构和列名 dt2
的新信息片段,自动收报机/日期/ 价钱。关键是自动收报机和日期。
我知道可以使用rbind(dt, dt2)
looking here或here,但我不想冒复制品,所以请考虑通过合并加入它们。
我期待 merge(dt, dt2, all = TRUE)
来做这个伎俩。
但是你得到 x.price y.price 而不是一个价格专栏!?
为什么dt
与2中的共享列不匹配?数据框文档暗示他们使用名称的交叉,但DT似乎不同。
目前,我正在使用 by = colnames(dt)
(merge(dt, dt2, all = TRUE, by = colnames(dt))
,来解决这个问题,但这是正确的做法吗?
谢谢,我希望得到一些指导/确认(并且不需要借助其他套餐)。
示例代码
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
吗?