Создайте новый столбец во фрейме данных, сопоставив два значения между фреймами данных - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь создать новый столбец во фрейме данных, используя mutate. Это должно сопоставить значения в двух столбцах между двумя разными фреймами данных, идентификатором и номером шага, а затем вернуть значение из третьего столбца в моем втором фрейме данных. Надеюсь, мой код, приведенный ниже, немного яснее, чего я пытаюсь достичь!

Правильный ли это путь, я изучал слияние, но не думаю, что это вполне так, как янужно.

Step1 <- iData%>%

filter (IndicatorID == 43)%>%

mutate (Step = 1)%>%

mutate (iresult = InputA + InputB)%>%

mutate (stepname = ifelse (IndicatorID == Step $ IndicatorID & Step == Step $ Step, Step $ StepName, "")))

По сути, следует поискать строку в шаге, где индикатор равен 43, а шаг = 1, а затем поместить значение в новый столбец, в данном случае это будет «Валовая добавленная стоимость». Любая помощь будет по достоинству оценена!

1 Ответ

1 голос
/ 02 октября 2019

Если я правильно интерпретирую, то, думая об этом как о соединении, а не как о мутации, можно было бы сделать это намного проще

Я создал фиктивные данные, надеюсь, это прояснит мои предположения. данные.

Итак, у нас есть две таблицы. В обоих у нас есть 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'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...