Добавить столбец на основе ссылочного столбца (Forex Rate, R laguage) - PullRequest
0 голосов
/ 16 февраля 2019

Я хочу добавить ссылку на курс Форекс к большим данным.Есть ли простые способы сделать это?

A (data.frame)

   Price      Date
1   100    2018-10-14
2   103    2018-10-16
3   102    2018-10-18
N   etc       etc

B (data.frame)

    Date      Forex Rate
1 2018-10-14       28
2 2018-10-15       22
3 2018-10-16       30
N    etc          etc

C (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 (справочник курсов валют), отсортированный по Дата .

1 Ответ

0 голосов
/ 16 февраля 2019

Данные, показанные в вопросе, кажутся немного противоречивыми (например, откуда взято «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         NA

dplyr

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

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   102
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...