У меня есть фрейм данных с 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"]
Ответ 1 · рейтинг 2 · Señor O
Лучший способ сделать это - создать справочную таблицу:
>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
Ответ 2 · рейтинг 1 · rmuc8
Насколько я понимаю, это похоже на создание фиктивной переменной, что вы хотите сделать здесь. Пытаться
> x$dummy <- as.numeric(Column1 != "A")
и вы должны получить 0 для всех A и 1 для других значений.
Подробнее см. в разделе Создание фиктивной переменной.