我有两个数据框-第一个数据框包含日期和货币,第二个数据框包含日期,货币和汇率。这是一个可复制的简短示例:
df1 <- data.frame(date = c(1:5),
currency = c("USD", "SEK", "DKK", "USD", "EUR"),
rate = rep(NA, 5))
df2 <- data.frame(date = rep(c(1:5), each = 4),
currency = rep(c("EUR", "DKK", "SEK", "USD")),
rate = abs(rnorm(20)))
我想将正确的汇率从数据框2传输到与货币和日期匹配的数据框1。
如果可能的话,我宁愿不使用循环,所以我尝试了这一点:
df1$rate <- df2$rate[df2$date == df1$date & df2$currency == df1$currency]
将单个速率转移到df1中的所有NA。
抱歉,如果我不能很好地解释自己,我是R的新手。
感谢您的帮助。
答案 0 :(得分:2)
df1$rate <- NULL
merge(df1,df2,by=c("date", "currency"),all.x=T)
结果:
# date currency rate
#1 1 USD 0.1048500
#2 2 SEK 0.3448154
#3 3 DKK 0.8488186
#4 4 USD 0.2233925
#5 5 EUR 2.2532021
答案 1 :(得分:0)
根据本文Can dplyr join on multiple columns or composite key?
改编library(tidyverse)
left_join(df1, df2, by = c("currency", "date"))
这将使您同时保留两列,然后既可以保留这两列,也可以使用select
摆脱不需要的列。