首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据参考栏添加列(外汇汇率、汇率)

根据参考栏添加列(外汇汇率、汇率)
EN

Stack Overflow用户
提问于 2019-02-16 07:16:43
回答 1查看 42关注 0票数 0

我想添加外汇汇率参考大数据。有什么简单的方法吗?

A(data.frame)

代码语言:javascript
复制
   Price      Date
1   100    2018-10-14
2   103    2018-10-16
3   102    2018-10-18
N   etc       etc

B(data.frame)

代码语言:javascript
复制
    Date      Forex Rate
1 2018-10-14       28
2 2018-10-15       22
3 2018-10-16       30
N    etc          etc

C(data.frame)

代码语言:javascript
复制
   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(外汇汇率参考),按日期排序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 07:35:27

问题中显示的数据似乎有点不一致(例如,"39“从哪里来?),但我怀疑这可以通过联接/合并来解决。

一些可消费数据:

代码语言:javascript
复制
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

代码语言:javascript
复制
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         NA

dplyr

代码语言:javascript
复制
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         22

data.table

代码语言:javascript
复制
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,或者使用稍微不同的语法:

代码语言:javascript
复制
# 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   102
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54720790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档