#r
#r
Вопрос:
У меня есть фрейм данных, который уже содержит фиктивные переменные для «бакалавра», «магистра» и «доктора философии», где 1 = человек имеет степень, а 0 = человек не имеет степени.
Как мне добавить новую фиктивную переменную в мой фрейм данных для получения степени бакалавра или выше?
Имя моего фрейма данных — колледж, и до сих пор я пробовал разные варианты
college$baplus <- if else(college["BA"],["MA"],["PHD] ==1, 0)
Степень бакалавра, магистра и доктора философии являются атомарными.
Ответ №1:
Мы можем использовать векторизованный подход rowSums
, т.е. подмножество столбцов ‘BA’, ‘MA’, ‘PHD’, получаем rowSums
. Выполните сравнение, чтобы проверить, больше ли сумма 0, затем преобразуйте логическое значение в целое число с
помощью ( TRUE
-> 1 и FALSE
-> 0)
college$baplus <- (rowSums(college[c("BA", "MA", "PHD")]) >0)
Было ifelse
бы без пробела, и это на самом деле не нужно, но если мы хотим синтаксис
college$baplus <- ifelse(rowSums(college[c("BA", "MA", "PHD")]) > 0, 1, 0)
Или другой вариант apply
с MARGIN = 1
(для последовательного применения функции)
college$baplus <- as.integer(apply(college[c("BA", "MA", "PHD")], 1, any))
Также разумно предположить, что нам нужно сравнивать только столбец «BA», потому что те, у кого более высокие степени, должны иметь «BA», поэтому, если цель состоит в том, чтобы проверить, есть ли у кого-то более высокие степени, rowSums
сравнение будет > 1
college$baplus <- (rowSums(college[c("BA", "MA", "PHD")]) > 1)