Я пытаюсь использовать оператор ifelse
внутри apply
и получаю нечетный результат. Я получаю ожидаемый ответ, если переменная равна 1
, но не тогда, когда эта переменная равна > 9
.ifelse statement in apply возвращает неожиданный результат
Ниже приведен пример набора данных, для которого я получаю правильный ответ:
my.data <- read.table(text = '
REFNO status stage marker cumulative newstage
1018567 ccc AA 0 1 AA
1018567 aaa NONE 0 1 NONE
1018567 aaa BB 1 1 BB
1018567 bbb CC 1 1 CC
1018567 eee CC 1 1 CC
1018567 mmm CC 1 1 CC
1018567 ppp CC 1 1 CC
1019711 ddd CC 1 1 CC
', header = TRUE, stringsAsFactors = FALSE)
my.data$newstage <- apply(my.data, 1, function(x) ifelse(x['status'] == 'aaa' &
x['stage'] == 'NONE' &
x['marker'] == 0 &
x['cumulative'] > 0, 'BB', x['stage']))
my.data
Набор данных ниже отличается только один элемент из этого выше, но я не получить правильный ответ.
my.data <- read.table(text = '
REFNO status stage marker cumulative newstage
1018567 ccc AA 0 1 AA
1018567 aaa NONE 0 1 NONE
1018567 aaa BB 1 1 BB
1018567 bbb CC 1 1 CC
1018567 eee CC 1 1 CC
1018567 mmm CC 1 1 CC
1018567 ppp CC 1 1 CC
1019711 ddd CC 14 1 CC
', header = TRUE, stringsAsFactors = FALSE)
my.data$newstage <- apply(my.data, 1, function(x) ifelse(x['status'] == 'aaa' &
x['stage'] == 'NONE' &
x['marker'] == 0 &
x['cumulative'] > 0, 'BB', x['stage']))
my.data
Благодарим за любые предложения. Возможно, я должен использовать инструкцию if
вместо if-else
?
В частности, я бы хотел, чтобы NONE
был заменен на BB
для newstage
во втором ряду.
Не уверен, если это проблема, но если вы посмотрите на 'применить (my.data2, 1, функция (x) x) 'Столбец маркера имеет два символа вместо одного из-за двух цифр 14 в столбце маркера. Это приводит к '' 0 "== 0' в вашем коде, что является' FALSE'. Однако '' 0 "== 0' является' TRUE' –
Почему вы не можете использовать 'with (my.data, ifelse (status == 'aaa' & stage == 'NONE' &! Marker & cumulative> 0 , 'BB', stage)) ' – akrun