Решение для таблиц данных.
Данные
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 вманекен по всей таблице data.table ..
> 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