Заменить все NA на FALSE в выбранных Столбцах в R

у меня есть вопрос, подобный этот, но мой набор данных немного больше: 50 столбцов с 1 столбцом как UID и другими столбцами, несущими либо TRUE или NA, Я хочу изменить все NA to FALSE, но я не хочу использовать явный цикл.

Can plyr делать трюк? Спасибо.

обновление #1

Спасибо за быстрый ответ, но что, если мой набор данных, как показано ниже:

df <- data.frame(
  id = c(rep(1:19),NA),
  x1 = sample(c(NA,TRUE), 20, replace = TRUE),
  x2 = sample(c(NA,TRUE), 20, replace = TRUE)
)

Я хочу только X1 и X2 как это можно сделать?

5 ответов


Если вы хотите сделать замену для подмножества переменных, вы можете использовать is.na(*) <- трюк, следующим образом:

df[c("x1", "x2")][is.na(df[c("x1", "x2")])] <- FALSE

IMO с использованием временных переменных упрощает логику:

vars.to.replace <- c("x1", "x2")
df2 <- df[vars.to.replace]
df2[is.na(df2)] <- FALSE
df[vars.to.replace] <- df2

попробуйте этот код:

df <- data.frame(
  id = c(rep(1:19), NA),
  x1 = sample(c(NA, TRUE), 20, replace = TRUE),
  x2 = sample(c(NA, TRUE), 20, replace = TRUE)
)
replace(df, is.na(df), FALSE)

обновлено для другого решения.

df2 <- df <- data.frame(
  id = c(rep(1:19), NA),
  x1 = sample(c(NA, TRUE), 20, replace = TRUE),
  x2 = sample(c(NA, TRUE), 20, replace = TRUE)
)
df2[names(df) == "id"] <- FALSE
df2[names(df) != "id"] <- TRUE
replace(df, is.na(df) & df2, FALSE)

tidyr::replace_na отличные функции.

df %>%
  replace_na(list(x1 = FALSE, x2 = FALSE))

это такое большое быстрое исправление. единственный трюк - вы составляете список столбцов, которые хотите изменить.


можно использовать


С dplyr вы также можете сделать

df %>% mutate_each(funs(replace(., is.na(.), F)), x1, x2)

это немного менее читаемый по сравнению с просто используя replace() но более общий, поскольку он позволяет выбрать столбцы для преобразования. Это решение особенно применимо, если вы хотите сохранить NAs в некоторых столбцах, но хотите избавиться от NAs в других.