我想添加外汇汇率参考大数据。有什么简单的方法吗?
A(data.frame)
Price Date
1 100 2018-10-14
2 103 2018-10-16
3 102 2018-10-18
N etc etcB(data.frame)
Date Forex Rate
1 2018-10-14 28
2 2018-10-15 22
3 2018-10-16 30
N etc etcC(data.frame)
price Date Forex Rate
1 100 2018-10-14 28
2 103 2018-10-16 30
3 102 2018-10-18 39
N etc etc etc我有A和B打算生成C通过添加B(外汇汇率参考),按日期排序。
发布于 2019-02-16 07:35:27
问题中显示的数据似乎有点不一致(例如,"39“从哪里来?),但我怀疑这可以通过联接/合并来解决。
一些可消费数据:
A <- read.table(header=TRUE, stringsAsFactors = FALSE, text="
Price Date
100 2018-10-14
103 2018-10-16
102 2018-10-18")
B <- read.table(header=TRUE, stringsAsFactors = FALSE, text="
Date Forex_Rate
2018-10-14 28
2018-10-15 22
2018-10-16 30")基R
merge(A, B, by = "Date", all = TRUE)
# Date Price Forex_Rate
# 1 2018-10-14 100 28
# 2 2018-10-15 NA 22
# 3 2018-10-16 103 30
# 4 2018-10-18 102 NAdplyr
dplyr::full_join(A, B, by = "Date")
# Price Date Forex_Rate
# 1 100 2018-10-14 28
# 2 103 2018-10-16 30
# 3 102 2018-10-18 NA
# 4 NA 2018-10-15 22data.table
library(data.table)
ADT <- as.data.table(A)
BDT <- as.data.table(B)
merge(ADT, BDT, by = "Date", all = TRUE)
# Date Price Forex_Rate
# 1: 2018-10-14 100 28
# 2: 2018-10-15 NA 22
# 3: 2018-10-16 103 30
# 4: 2018-10-18 102 NA这看起来是一样的,但是它使用的是data.table:::merge.data.table,这保留了data.tables的一些附带优势。但是,如果您想做左联接,那么它的语法仍然可以使用merge,或者使用稍微不同的语法:
# equivalent to dplyr::left_join(ADT, BDT, by = "Date") or merge(ADT, BDT, by = "Date", all.x = TRUE)
BDT[ADT, on = "Date"]
# Date Forex_Rate Price
# 1: 2018-10-14 28 100
# 2: 2018-10-16 30 103
# 3: 2018-10-18 NA 102https://stackoverflow.com/questions/54720790
复制相似问题