将NA转换为特定列的虚拟变量

时间:2019-09-26 21:37:33

标签: r

我正在尝试从某些特定表格中制作假人。我知道如何在一列中执行此操作,但是我需要同时执行23遍。

我的问题不是转换NA,而是选择要转换的特定列。

我尝试了以下操作,并将整个表转换为零和一:

table <- ifelse(is.na(table),0,1)

我也尝试过

table<- ifelse(is.na(table[,3:25]),0,1)

这根本不好

2 个答案:

答案 0 :(得分:1)

Tidyverse方法是使用mutate_at指定要将函数应用到的列。在这里,我将所有NA替换为0,将所有非NA替换为1。

table <- table %>% 
mutate_at(c(3:25), ~replace(., is.na(.), 0))%>% 
mutate_at(c(3:25), ~replace(., !is.na(.), 1))

答案 1 :(得分:0)

数据表解决方案。

数据

dt = data.table(
  x = c(1, NA, 3),
  y = c(NA, NA, 3),
  z = c(1, 2, 3),
  w = c(NA, 2, NA)
)

> dt
    x  y z  w
1:  1 NA 1 NA
2: NA NA 2  2
3:  3  3 3 NA

代码

我们可以将整个数据表中的NA转换为虚拟对象。

> dt[, lapply(.SD, function(x) ifelse(is.na(x), 1, 0))]
   x y z w
1: 0 1 0 1
2: 1 1 0 0
3: 0 0 0 1

或使用.SDcols参数选择要在其上生成虚拟变量的列间隔(列):

cols = 2:4
dt[, (cols) :=lapply(.SD, function(x) ifelse(is.na(x), 1, 0)), .SDcols = cols]

> dt
    x y z w
1:  1 1 0 1
2: NA 1 0 0
3:  3 0 0 1