Как использовать оператор if then в R для создания новой переменной на основе другой

У меня есть фрейм данных с Column1, который может принимать значение любой буквы алфавита. Я хочу создать второй столбец, в котором будет указано число, соответствующее этой букве. Я пытаюсь сделать это с помощью оператора if then... Но продолжаю получать сообщение об ошибке. Извините, это простой вопрос, но я попробовал сайт R для чайников http://www.dummies.com/how-to/content/how-to-use-if-statements-in-r.html безуспешно!

x$Column2 ‹- NULL if (x$Column1 == "A") then[x$Column2 ‹- "One"]


person Alexander    schedule 10.02.2015    source источник
comment
используйте похвалы ({ и }) вместо квадратных скобок ([ и ]) и убедитесь, что вы ставите разрывы строк.   -  person Jealie    schedule 11.02.2015


Ответы (2)


Лучший способ сделать это — создать справочную таблицу:

>Reference = data.frame(Number = c("One", "Two", "Three", "Four"), Letter = c("A", "B", "C", "D"))
> Reference
  Number Letter
1    One      A
2    Two      B
3  Three      C
4   Four      D
> Data = data.frame(Letter = c("B", "B", "C", "A", "D"))
> Data
  Letter
1      B
2      B
3      C
4      A
5      D

Затем вы можете найти индексы:

> Indices = sapply(Data$Letter, function(x) which(x == Reference$Letter))
> Indices
[1] 2 2 3 1 4

И используйте их для создания столбца

> Data$Number = Reference[Indices,]$Number
> Data
  Letter Number
1      B    Two
2      B    Two
3      C  Three
4      A    One
5      D   Four
person Señor O    schedule 10.02.2015
comment
После загрузки пакета dplyr вы можете запустить left_join(Data,Reference), чтобы выполнить то же самое. - person Sam Firke; 11.02.2015

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

> x$dummy <- as.numeric(Column1 != "A")

и вы должны получить 0 для всех A и 1 для других значений.

Подробнее см. в разделе Создание фиктивной переменной.

person rmuc8    schedule 11.02.2015