любой быстрый способ добавить двоичный столбец путем условной фильтрации данных в R? - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь извлечь строки условно, просматривая значение в столбцах, и намереваюсь добавить новый столбец с двоичным значением в зависимости от того, появилось ли значение в этой строке или нет. Для меня идея проста, я использовал функции, чтобы сделать это, но у меня возникает следующая ошибка:

Ошибка в as.logical (test): не может привести тип 'замыкание' к вектору типа 'логический'

воспроизводимые данные

Вот воспроизводимые данные на публикуемых c gist .

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

f= read.csv("mydf.csv", header = TRUE)
df_new <- f %>% filter(str_detect(lelvel_care, "Intensive"))
df_new  %>% mutate(new_col=ifelse(. %>% select(setting, "ICU"),1,NA)) %>% write.csv

, так как я много времени работал над , использование для выполнения таких манипуляций освежает мою разум. Для меня, я мог бы сделать приведенный выше код правильным и эффективным с помощью утилит dplyr, но не уверен, как это исправить и заставить его работать. Какие-нибудь мысли? Кто-нибудь может указать мне, как это исправить? Есть ли лучший способ сделать это?

желаемый вывод

Я хочу присвоить двоичное значение (1, NA), если столбец level_care имеет значение Intensive и setting имеет ICU, тогда экспорт привел df как csv. как заставить мой код работать? какие-нибудь быстрые мысли?

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Мы можем сделать сравнение по столбцу 'настройки' на наличие строки 'ICU' и, если она найдена 1 или вернуть NA

library(dplyr)
library(stringr)
df_new <- df_new  %>% 
              mutate(new_col=ifelse(str_detect(setting,  "ICU"),1, NA))

благодаря @akrun:

f %>% mutate(flag = ifelse(grepl("ICU", setting) & grepl("Intensive", level_care), 1, NA)) 
1 голос
/ 23 марта 2020

Вы можете использовать сочетание mutate, ifelse и grepl, чтобы получить нужный столбец, а затем отфильтровать его.

df_new <- f %>% dplyr::mutate(flag = ifelse(setting == "ICU", 
                     grepl("Intensive",level_care ), NA) %>%
                dplyr::filter(flag == TRUE)
...