数据帧之间的子集

时间:2018-06-21 13:15:18

标签: r subset

我有两个数据框-第一个数据框包含日期和货币,第二个数据框包含日期,货币和汇率。这是一个可复制的简短示例:

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的新手。

感谢您的帮助。

2 个答案:

答案 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摆脱不需要的列。