Использование If/Else в кадре данных
У меня есть набор данных, который выглядит примерно как
data<-c(0,1,2,3,4,2,3,1,4,3,2,4,0,1,2,0,2,1,2,0,4)
frame<-as.data.frame(data)
Теперь я хочу создать новую переменную в этом фрейме данных. Если столбец "данные" сообщает о количестве 2 или более, я хочу, чтобы он имел "2" в этой строке, и если есть 1 или 0 (например, первые два наблюдения), я хочу, чтобы новая переменная имела "1" для этого наблюдения.
Я пытаюсь сделать это, используя следующий код:
frame$twohouses<- if (any(frame$data>=2)) {frame$twohouses=2} else {frame$twohouses=1}
Однако, если я запустил эти 3 строки script, каждое наблюдение в столбце "два дома" закодировано с помощью 2. Однако некоторые из них должны быть закодированы с помощью 1.
Итак, мой вопрос: что я делаю неправильно с моей линией if else или script? Или есть альтернативный способ сделать это.
Мой вопрос похож на этот:
Использование ifelse по коэффициенту в R
но никто не ответил на этот вопрос.
Большое спасибо заранее!
Ответы
Ответ 1
Используйте ifelse
:
frame$twohouses <- ifelse(frame$data>=2, 2, 1)
frame
data twohouses
1 0 1
2 1 1
3 2 2
4 3 2
5 4 2
...
16 0 1
17 2 2
18 1 1
19 2 2
20 0 1
21 4 2
Разница между if
и ifelse
:
-
if
- это оператор потока управления, принимающий одно логическое значение в качестве аргумента
-
ifelse
- это векторизованная функция, принимающая векторы как все ее аргументы.
Страница справки if
, доступная через ?"if"
, также укажет на ?ifelse
Ответ 2
Попробуйте это
frame$twohouses <- ifelse(frame$data>1, 2, 1)
frame
data twohouses
1 0 1
2 1 1
3 2 2
4 3 2
5 4 2
6 2 2
7 3 2
8 1 1
9 4 2
10 3 2
11 2 2
12 4 2
13 0 1
14 1 1
15 2 2
16 0 1
17 2 2
18 1 1
19 2 2
20 0 1
21 4 2