Как использовать mutate во фрейме данных в R для обновления столбца на основе значения второго столбца - PullRequest
0 голосов
/ 16 апреля 2019

В RI я пытаюсь обновить один столбец в фрейме данных на основе значения другого столбца

Таким образом, кадр данных - это 2 столбца, 1-й столбец с / ба номер, а второй столбец - это дата.Для 3 конкретных дат мне нужно обновить столбец экзамена до определенного значения.Фрейм данных выглядит следующим образом:

Exams  Year
NA     2009-12-01
NA     2010-01-01
NA     2010-02-01

, и я хочу изменить NA на конкретное значение для этих 3 дат

Я пробовал это:

library(dplyr)

ABVILE %>%
  mutate(Exams=replace(Exams, Year==2009-12-01, 1709.67)) %>%
  as.data.frame()

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

Я ожидаю, что это будет так:

1709.67 2009-12-01

но я получаю это:

NA  2009-12-01.

1 Ответ

0 голосов
/ 16 апреля 2019

Существуют (как минимум) два варианта, использующие методы dplyr. Обратите внимание, что здесь я предполагаю, что ваша Year переменная является символьным вектором. Первый вариант использует оператор ifelse:

ABVILE %>%
  mutate(Exams = ifelse(Year == "2009-12-01", 1709.67, Exams)) %>%
  data.frame

ifelse принимает условие теста и два условия возврата (если условие выполнено и не выполнено, соответственно). Это простое решение, если у вас есть только одно условие теста. Если вам нужно объединить многие из них, то dply предоставляет замечательную функцию под названием case_when. Вот как это будет выглядеть:

ABVILE %>%
  mutate(Exams = case_when(Year == "2009-12-01" ~ 1709.67,
                           Year == "2010-01-01" ~ 999.999)) %>%
  data.frame

Это эквивалентно

ABVILE %>%
  mutate(Exams = ifelse(Year == "2009-12-01", 1709.67,
                        ifelse(Year == "2010-01-01", 999.999, NA))) %>%
  data.frame

Очевидно, что с case_when будет гораздо легче справиться, если у вас будет много условий / заданий теста.

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