Выбор нескольких NA в разных строках и столбцах кадра данных - PullRequest
0 голосов
/ 24 августа 2018

У меня есть Dataframe с 12000 строками и 35 столбцами с несколькими NA в разных строках или столбцах.

Я хочу создать вид функции ifelse, чтобы выбрать и изменить их на значение (например, «0» или «9999»).

Моя проблема в том, что is.na(dataframe), кажется, не работает на всем фрейме данных, но я не особо очарован выбором для каждого отдельного столбца.

Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

A dplyr решение:

Для NA или NaN:

df <- tibble(a = c(1, NaN, 2), b = c(NA,1,2))

df %>% 
  replace(is.na(.), 0)

# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1    1.    0.
2    0.    1.
3    2.    2.

Для "NA" или "NaN" в виде строк:

df <- tibble(a = c(1, "NaN", 2), b = c("NA",1,2))

df %>% 
    mutate_all(funs(replace(., .=="NaN", 0))) %>% 
    mutate_all(funs(replace(., .=="NA", 0))) %>% 
    mutate_all(funs(as.numeric))

# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1    1.    0.
2    0.    1.
3    2.    2.
0 голосов
/ 24 августа 2018
library(dplyr)

data <- tibble(a = c(1, NA, 2), b = c(NA,1,2)) # let's create some data
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1    NA
2    NA     1
3     2     2

data[is.na(data)] <- 0
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     0
2     0     1
3     2     2

Или с NaN:

data <- tibble(a = c(1, NaN, 2), b = c(NaN,1,2))
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1   NaN
2   NaN     1
3     2     2

data[is.na(data)] <- 0 # still works the same 
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     0
2     0     1
3     2     2

Если у вас есть "NA" в виде строк:

data <- tibble(a = c(1, "NA", 2), b = c("NA",1,2))
data[data=="NA"] <- NA # first fix and bring all to "true" NA
data[is.na(data)] <- 0 # still works the same 
data
# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     0
2     0     1
3     2     2
...