операторы if с несколькими условиями и несколькими вариантами

#r #if-statement #conditional-statements

#r #оператор if #условные операторы

Вопрос:

У меня есть следующая таблица данных в R:

        industry fyear change.in.employeegrowth change.in.netincome.to.sales change.in.ROA change.in.Assetturnover change.in.RandD change.in.CAPEX.byassets
1     Agriculture  1999               0.08766928                  0.036667693   0.021561014              0.08213972    1.893469e-03              0.014274404
2     Agriculture  2000               0.13963964                  0.066484354   0.027813095              0.15047066    4.116929e-03              0.028307019
3     Agriculture  2001               0.13636364                  0.041775993   0.030575742              0.05965700    8.678983e-03              0.014702146
4     Agriculture  2002               0.05484111                  0.092764170   0.058518761              0.04699455    2.078513e-03              0.010364144
5     Agriculture  2003               0.08757912                  0.084572235   0.041094305              0.10765641    4.061465e-03              0.008522656
6     Agriculture  2004               0.04970685                  0.058833426   0.028568214              0.02540688    1.275619e-02              0.005628402
7     Agriculture  2005               0.17954545                  0.040047709   0.041380006              0.08353320    3.917954e-02              0.009383056
8     Agriculture  2006               0.19047619                  0.063405763   0.047080200              0.07955826    2.465875e-02              0.005213245
9     Agriculture  2007               0.09165972                  0.098566476   0.064550850              0.09336734    9.296165e-03              0.008958315
10    Agriculture  2008               0.04227658                  0.076702017   0.056679238              0.12820537    2.575690e-03              0.010149566
  

и еще 47 отраслей.

Теперь я хочу создать фиктивную переменную для определенных отраслей и лет, но я борюсь с формулировкой моего оператора if. Фиктивный файл должен печатать 1, если true, и ничего, если нет (альтернативно 0). Однако я не хочу переопределять предыдущие операторы повторяющимся кодом.

compustat.medians$industry относится к классу compustat.medians $fyear относится к классу integer

Я попробовал следующий синтаксис:

 compustat.medians$pre.wave.year <-if( (compustat.medians$industry == "Food Products") amp; (compustat.medians$fyear == 2012) )
                                 or ( (compustat.medians$industry == "Candy and Soda") amp; (compustat.medians$fyear == 2012) )
                                 or ( (compustat.medians$industry == "Recreation") amp; (compustat.medians$fyear == 2005) )
{
  print(1)
}

  

Я получаю сообщение об ошибке: условие имеет длину> 1, и
для всех вариантов будет использоваться только первый элемент
, я пытаюсь.

Есть ли способ использовать оператор if для нескольких условий и сразу с несколькими возможными комбинациями?

Спасибо,

Комментарии:

1. Функция ifelse() реализует векторизованную версию if() {} else {} конструкции.

2. Я думаю, вы ищете ifelse(...) и | вместо or

Ответ №1:

  • Вам нужно использовать ifelse вместо if / else
  • В R нет or функции, используйте | .
  • Вместо использования ifelse(condition, 1, 0) мы можем использовать as.integer(condition) .
  • Вы можете сравнить несколько значений с %in% , поэтому ваши условия 1 и 2 могут быть объединены.

Попробуйте :

 compustat.medians$pre.wave.year <- as.integer(with(compustat.medians, 
        industry %in% c("Food Products", "Candy and Soda") amp; fyear == 2012 | 
        industry == "Recreation" amp; fyear == 2005))