我有两个数据框:
Response <- read.csv(file = "https://raw.githubusercontent.com/robintux/Datasets4StackOverFlowQuestions/master/Response.csv")
conversionRates <- read.csv(file = "https://raw.githubusercontent.com/robintux/Datasets4StackOverFlowQuestions/master/conversionRates.csv")
现在,我需要在Exchange
数据框中建立一个Response
变量,比较conversionRates$originCountry
和Response$CompensationCurrency
中的值,这是我的主要想法
Response$Exchange <- conversionRates$exchangeRate[conversionRates$originCountry %in% Response$CompensationCurrency ]
但是我对最后一行代码有疑问:
Error in `$<-.data.frame`(`*tmp*`, Exchange, value = c(1, 1.195826, 0.01562, :
replacement has 84 rows, data has 4131
我觉得问题在于我正在比较的变量的长度。我读到可以使用dplyr
函数(left_join
)来完成。但是我只想完成任务使用R的基本功能
答案 0 :(得分:2)
尝试:
indx <- match(Response$CompensationCurrency, conversionRates$originCountry)
Response$Exchange <- conversionRates[indx, "exchangeRate"]
如果您设置merge
, all.x = TRUE
也将起作用。