ЕСЛИ ... ДАЛЕЕ в R Помощь - PullRequest
       4

ЕСЛИ ... ДАЛЕЕ в R Помощь

0 голосов
/ 26 февраля 2019

Я пытаюсь написать утверждение If ... Else в R, и у меня возникают некоторые трудности.У меня есть набор данных, который содержит данные за 20 лет, и значения VariableA необходимо корректировать в зависимости от конкретного года, в котором они находятся (VariableB).Я пытался использовать оператор If ... Else, но продолжаю получать:

VariableA VariableB Multiplier VariableC 100 1998 1.4 140 100 1998 1.4 140 100 1999 1.7 170 100 1999 1.7 170 100 2000 2.0 200 100 2000 2.0 200

Ошибка: неожиданное '}' в "}"

Код, который я пытался заставить работать, приведен ниже:

Data <- function(DMG, YEAR){
if(YEAR = "1998"){
Data$TotDmg2017 <- Data$DMG * 1.433988335
}
}

Я не уверен, является ли этот код правильным для использования или это самый эффективный способ сделать это.Я не знаком с циклами и заявлениями If ... Else, поэтому любая помощь будет наиболее ценной.

1 Ответ

0 голосов
/ 28 февраля 2019

Вот подход с использованием tidyverse:

library(tidyverse)

df <- tribble(~varA, ~varB, ~multiplier, ~varC,
              100,1998,1.4,140,
              100,1998,1.4,140,
              100,1999,1.7,170,
              100,1999,1.7,170,
              100,2000,2.0,200,
              100,2000,2.0,200
              )

df <- df %>%
  mutate(varA = ifelse(varB == 1998, varA * 1.433988335, varA))

Вывод:

# A tibble: 6 x 4
   varA  varB multiplier  varC
  <dbl> <dbl>      <dbl> <dbl>
1  143.  1998        1.4   140
2  143.  1998        1.4   140
3  100   1999        1.7   170
4  100   1999        1.7   170
5  100   2000        2     200
6  100   2000        2     200

Спасибо @gregor за напоминание о необходимости объяснения кода.

IВ предисловии хотел бы сказать, что я просто представляю альтернативный подход к рассматриваемому вопросу.Если этот подход не заслужен, пожалуйста, не стесняйтесь его игнорировать.

Команда mutate() - это грамматический способ создания столбца в тидиверсе.По сути, я создаю новый столбец с именем varA, который по существу заменит существующий столбец varA.

В исходном запросе вы использовали операторы if(){} и else(){}.Оба действительны.Для простоты я использовал функцию ifelse().Эта функция встроена в базу R, и я нахожу ее немного легче читать.Личные предпочтения.

Синтаксис для ifelse(): ifelse(test, yes, no) (согласно странице справки).По сути, если ваше условие проверки истинно, то все, что вы указали в аргументе «да», будет выполнено, в противном случае будет выполнен аргумент «нет».

В приведенном мною примере я просто использовал аналогичное условие тестачто ты применил.Если бы значение varB оказалось равным 1998, тогда оно возьмет существующее значение в varA и умножит его на 1,4339.

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