Преобразование NA в макеты для определенных столбцов - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь сделать манекены из некоторых конкретных таблиц.Я знаю, как сделать это для одного столбца, но мне нужно сделать это одновременно для 23.

Моя проблема не в том, чтобы преобразовать NA, а в том, чтобы выбрать конкретные столбцы для преобразования.

Я попробовал следующее, и он преобразовал всю таблицу в нули и единицы:

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

Я также попробовал это

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

, и это совсем не хорошо

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

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))
0 голосов
/ 27 сентября 2019

Решение для таблиц данных.

Данные

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...