重新编码R数据帧中的多列

时间:2020-03-26 09:07:16

标签: r dataframe

我在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 个答案:

答案 0 :(得分:3)

在基数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
相关问题