Если я правильно интерпретирую, то, думая об этом как о соединении, а не как о мутации, можно было бы сделать это намного проще
Я создал фиктивные данные, надеюсь, это прояснит мои предположения. данные.
Итак, у нас есть две таблицы. В обоих у нас есть IndicatorID и Step. Затем в шаговом фрейме данных у нас есть переменная StepName, и мы хотим иметь возможность использовать эти значения в третьей таблице, называемой step1, путем сопоставления по IndicatorID и Step.
step <- tibble(
IndicatorID = c(41, 42, 43, 44, 45, 46),
Step = c(1, 2, 1, 4, 5, 6),
StepName = c('left', 'right', 'up', 'down', 'under', 'over'))
iData <- tibble(
IndicatorID = c(seq(from = 1, to = 43)),
InputA = runif(43),
InputB = runif(43)) %>%
mutate(iresult = InputA + InputB)
Step1 <- iData %>%
filter(IndicatorID == 43) %>%
mutate(Step = 1) %>%
left_join(step, by = c('IndicatorID', 'Step'))
IndicatorID InputA InputB iresult Step StepName
<dbl> <dbl> <dbl> <dbl> <dbl> <chr>
43 0.773 0.124 0.898 1 up
### Example where we select only the columns from step
### that we are interested in keeping, without doing a semi_join
Step1 <- iData %>%
filter(IndicatorID == 43) %>%
mutate(Step = 1) %>%
left_join(step %>%
select(IndicatorID, Step, StepName),
by = c('IndicatorID', 'Step'))