2016-02-12 1 views
0

У меня есть набор данных с больным раком и различных исходамиКак перекодировать переменную характер Итогового в dichtomous Результата (0,1) в R

TypeofOutcome  DateStageIV 

NA     01.04.2014 
Died from melanoma 01.06.2011 
Died from melanoma 01.11.2013 

Я хочу новую колонку под названием «Итоги» со всеми пациенты все еще живо закодированные как 1 и все мертвые кодированные как 0. Из предыдущего упражнения я создал код:

mergedData$Outcome <- 1* (mergedData$TypeofOutcome = c ("Alive with stable disease", "Alive with progressive disease", "Alive with complete response")) 

Я уже предположил, что это не будет работать, и я получил сообщение об ошибке:

Ошибка в 1 * (mergedData $ TypeofOutcome = с («Живой со стабильной болезнью»,:
нечислового аргумента бинарного оператора

Я уверен, что есть простое решение для моей проблемы.

+0

1. Я не думаю, что ваш предыдущий код делает то, что вы считаете, что это (вам нужно% в% здесь. 2. Является ли с помощью регулярные выражения - вариант (поиск «умер» в результате. – Heroka

+0

Ну, возможно, кодирование его в мертвое/живое. Я как бы искал что-то вроде (на словах): Результат = 1, если TypeofOutcome Alive со стабильной болезнью или Живой с прогрессирующим заболеванием ...., Исход = 0, если TypeofOutcome умер от меланомы, умер от других причин .... – Feli

+0

Как вы хотите, чтобы значения NA обрабатывались? Вы могли бы сделать что-то вроде dat $ result <- grepl («Died», dat $ TypeOfOutcome) – Heroka

ответ

0

Если вы правильно поняли, вы хотите создать дихотомическую переменную, зависящую от значения строковой переменной, например: если TypeOfOutcome соответствует любому из «Живых со стабильной болезнью», «Живой с прогрессирующим заболеванием» или «Живой» с полным ответом», Outcome бы 1 в противном случае 0. Я предполагаю, что ваш набор данных похож на этот

mergedData <- data.frame(
    TypeOfOutcome = c("Alive with stable disease", "Alive with progressive disease", "Alive with complete response", NA, "Died from melanoma"), 
    DateStageIV = sample(seq(as.Date('2011/01/01'), as.Date('2015/01/01'), by="day"), 5)) 


#     TypeOfOutcome DateStageIV 
# 1  Alive with stable disease 2013-05-09 
# 2 Alive with progressive disease 2014-08-08 
# 3 Alive with complete response 2013-02-10 
# 4       <NA> 2014-05-23 
# 5    Died from melanoma 2012-08-08 

функция ifelse подходит для этого из перекодировки, основной синтаксис:

ifelse(test, yes, no) 

Если значение в test истинно, верните значение yes, иначе возвращайте значение no. В этом случае test - это все случаи, когда пациент все еще жив, о чем указывает строка в TypeofOutcome, являющаяся «Живой со стабильной болезнью», «Живой с прогрессирующим заболеванием» или «Живой с полным ответом». Тест на это было бы:

test <- mergedData$TypeOfOutcome %in% c("Alive with stable disease", "Alive with progressive disease", "Alive with complete response") 

test будет TRUE, если значение в TypeOfOutcome соответствует любому из случаев после оператора %in%. yes затем будет 1 и no будет 0. Чтобы создать новую переменную

mergedData$Outcome <- ifelse(test, 1, 0) 

mergedData 

#     TypeOfOutcome DateStageIV Outcome 
# 1  Alive with stable disease 2013-05-09  1 
# 2 Alive with progressive disease 2014-08-08  1 
# 3 Alive with complete response 2013-02-10  1 
# 4       <NA> 2014-05-23  0 
# 5    Died from melanoma 2012-08-08  0 
+0

Это именно то, что я искал :) Большое спасибо – Feli

Смежные вопросы