ifelse добавить вычисляемое поле в R dataframe - PullRequest
0 голосов
/ 26 апреля 2020

Привет всем. Я пытаюсь добавить вычисляемое поле во фрейм данных в R, используя несколько условных выражений одновременно.

У меня есть следующий фрейм данных с именем df

     ID A                 AA          AAA        AAAA   AAAAA
1     1 a                 no            57         10     100.0%
2     2 b                 no            32          7      70.0%
3     3 c                yes            30          7      70.0%
4     4 d                 no            52          7      70.0%

И я хочу добавить новое поле с именем Z со следующими условиями, которые в основном добавляют 25%, если значение true

ifelse(df$AA=="yes",0.25,0) + ifelse(df$AAA<30,0.25,0) + ifelse(df$AAAA>4,0.25,0)

Итак, я добавил следующий код

df$Z<-as.data.frame(ifelse(df$AA=="yes",0.25,0)+ifelse(df$AAA<30,0.25,0)+ifelse(df$AAAA>4,0.25,0))

, но получил следующую ошибку

Error in `$<-.data.frame`(`*tmp*`, Z, value = list(`ifelse(df$AA=="yes",0.25,0)+ifelse(df$AAA<30,0.25,0)+ifelse(df$AAAA>4,0.25,0)` = numeric(0))) : 
  replacement has 0 rows, data has 200

Я думаю, я пытаюсь перевести формулу Excel в R, которая является

=IF(C2="yes";25%;0)+IF(D2<30;25%;0)+IF(E2>4;25%;0)

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 26 апреля 2020

В последнем столбце, если у вас есть знак '%', удалите его перед выполнением сравнения.

df$AAAAA <- as.numeric(sub('%', '', df$AAAAA))
df$Z <- with(df, ifelse(AA=="yes",0.25,0) + ifelse(AAA<30,0.25,0) +
                 ifelse(AAAA>4,0.25,0))

Вы также можете сделать это без ifelse

df$Z <- with(df, (AA == 'yes') * 0.25 + (AAA < 30) * 0.25 + (AAAA > 4) * 0.25)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...