У меня есть два набора данных:
loc <- c("a","b","c","d","e")
id1 <- c(NA,9,3,4,5)
id2 <- c(2,3,7,5,6)
id3 <- c(2,NA,5,NA,7)
cost1 <- c(10,20,30,40,50)
cost2 <- c(50,20,30,30,50)
cost3 <- c(40,20,30,10,20)
dt <- data.frame(loc,id1,id2,id3,cost1,cost2,cost3)
id <- c(1,2,3,4,5,6,7)
rate <- c(0.9,0.8,0.7,0.6,0.5,0.4,0.3)
lookupd_tb <- data.frame(id,rate)
, что я хочу сделать, это сопоставить значения в dt с lookup_tb для id1, id2 и id3 и, если есть совпадение, умножить скорость для этого идентификатора
Это мой подход:
dt <- dt %>%
left_join(lookupd_tb , by=c("id1"="id")) %>%
dplyr :: mutate(cost1 = ifelse(!is.na(rate), cost1*rate, cost1)) %>%
dplyr :: select (-rate)
то, что я делаю сейчас, работает нормально, но я должен повторить это 3 раза для каждой переменной, и мне было интересно, если естьэто более эффективный способ сделать это (возможно, с использованием apply family?)
Я попытался объединить все три переменные с идентификатором в моей справочной таблице, но когда показатель соединен с моим dt, все затраты (cost1,cost2 и cost3) будут умножены на тот же коэффициент, который я не хочу.
Я ценю вашу помощь!