Запись нескольких столбцов в фрейме данных R - PullRequest
1 голос
/ 26 марта 2020

У меня есть медицинский фрейм данных в R, который в настоящее время содержит 700 столбцов. Он также включает в себя информацию о лекарствах, предоставляемых пациентам. Эта информация распространяется на сотни столбцов (для каждого класса). Проблема в том, что информация хранится в виде свободного текста. Я хочу изменить информацию на 1 и 0, где 1 код, в котором есть текст в ячейке, а 0 представляет NA, например:

dat$Admission_Ace.Inhibitors..Plain <- factor(ifelse(is.na(dat$Admission_Ace.Inhibitors..Plain), 0, 1))

Однако, несмотря на то, что это решение работает отлично, оно работает только для один столбец за раз, и мне нужно перекодировать сотни. До сих пор мне не удавалось автоматизировать процессы. Не могли бы вы помочь мне?

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

admission <- names(dat)[grepl("Admission", names(dat), ignore.case = T )]

1 Ответ

3 голосов
/ 26 марта 2020

В базе R, используя lapply:

dat[admission] <- lapply(dat[admission], function(x) +(!is.na(x)))

В dplyr, используя mutate_at:

library(dplyr)
dat %>% mutate_at(vars(admission), ~+(!is.na(.)))

is.na проверяет значения NA, ! отрицает их, а + преобразует значения TRUE / FALSE в 1 / 0 соответственно.

Используя воспроизводимый пример,

dat <- data.frame(a = c(1, 2, 3, NA), b  =c(NA, NA, 3, 2))
dat[] <- lapply(dat, function(x) +(!is.na(x)))
dat

#  a b
#1 1 0
#2 1 0
#3 1 1
#4 0 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...