我正在尝试从某些特定表格中制作假人。我知道如何在一列中执行此操作,但是我需要同时执行23遍。
我的问题不是转换NA,而是选择要转换的特定列。
我尝试了以下操作,并将整个表转换为零和一:
table <- ifelse(is.na(table),0,1)
我也尝试过
table<- ifelse(is.na(table[,3:25]),0,1)
这根本不好
答案 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