ifelse для разных мест в строке - PullRequest
0 голосов
/ 07 мая 2020

Мне нужна помощь в создании категориального значения (называемого x2) с помощью оператора ifelse для строковой переменной x1. Или, конечно, что-то еще, кроме ifelse, но я думаю, что он должен работать с ifelse?

изображение фрейма данных

набран фрейм данных:
номер пациента <- c ('1', '2', '3') <br>x1 <- c ('54836', '12789', '78955') </p>

класс из x1 это «характер». Символы в x1 имеют несколько значений.

если первый символ в x1 == 1, то я хочу, чтобы новая переменная x2 стала «да», если нет, то «нет». Я сделал следующее: создал новый столбец (с именем x1.1), используя substr , а затем использовал оператор ifelse для этого нового столбца, и это сработало.

data $ x1.1 <- substr (data $ x1, 1, 1) # создать x1.1, взяв из x1 первый символ, и использовать всего 1 символ </p>

data $ x2 <- ifelse (data $ x1.1 == 1, 'да', 'нет') </p>

изображение фрейма данных с добавленными x1.1 и x2

Но мне интересно, смогу ли я сделать это короче. Так что получите x2 без необходимости создавать x1.1. Я имел в виду что-то подобное, но это не работает:

data $ x2 <- ifelse (data $ x1 [1] == 1, 'yes', 'no') # поэтому я вместо 'x1', я называю 'x1 [1]', так что это то, что я хочу, чтобы код делал: </p>

для пациента 1, если первый символ в x1 == 1, результат в новом столбце x2 = = 'да', если нет, то 'нет'

для пациента 2, если первый символ в x1 == 1, результат в новом столбце x2 == 'да', если нет, то 'нет '

для пациента 3, если первый символ в x1 == 1, результат в новом столбце x2 ==' да ', если нет, то' нет '

Причем, а не глядя на первый символ, я также хотел бы иметь возможность:

- смотреть на второй символ

- смотреть на второй + третий символ вместе

Есть способ для меня это сделать, но вместо одного x1 у меня фактически есть x1, x2 x3 .... x29 x30. И в них есть 4 значения, так что если я буду делать это «по-своему», это будет означать, что я сначала должен создать 120 новых столбцов, прежде чем я смогу даже начать создание правильных соответствующих категориальных столбцов. Это увеличивает мой фрейм данных и дает много строк кода, которые я хотел бы предотвратить.

Надеюсь, это сообщество может мне помочь. Ура :)

PS Это мой первый пост о stackoverflow, если у вас есть советы о том, как улучшить мой пост, дайте мне знать (я уже смотрел некоторые видео на YouTube, но они не помогли, мой самый большой проблема nog заключается в том, как красиво показать фрейм данных)

PS Я использовал функцию поиска, но не смог найти ответа на этот вопрос.

1 Ответ

1 голос
/ 07 мая 2020

Попробуйте следующее:

data$x2 <- ifelse(substr(x1, 1, 1) == "1", "yes", "no")

Возможно, также посмотрите dplyr::case_when, если вам нужно несколько операторов ifelse.

...