R 选择多个NA';数据帧的不同行和列中的

R 选择多个NA';数据帧的不同行和列中的,r,dataframe,selection,na,R,Dataframe,Selection,Na,我有一个数据框,有12000行和35列,在不同的行或列中有多个NA 我想创建一种ifelse函数来选择并将其更改为值(如“0”或“9999”) 我的问题是,is.na(dataframe)似乎不能在整个数据帧上工作,但我对为每个单独的列进行选择并不感兴趣 有更好的办法吗 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

我有一个数据框,有12000行和35列,在不同的行或列中有多个NA

我想创建一种ifelse函数来选择并将其更改为值(如“0”或“9999”)

我的问题是,
is.na(dataframe)
似乎不能在整个数据帧上工作,但我对为每个单独的列进行选择并不感兴趣

有更好的办法吗

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
如果将
“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
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.
数据
如果将
“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
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.

数据A
dplyr
解决方案:

对于
NA
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
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.

A
dplyr
解决方案:

对于
NA
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
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.

data[is.na(data)]na实际上是NaN。。也许这就是问题所在?似乎更有可能是字符串值,比如
“NA”
,而不是
NA
NaN
值应以相同的方式处理。下面是一个小示例
data=data.frame(x1=c(1,2,3,4),x2=c(1,NA,2,NA),x3=as.character(c(“NaN”,2,“NA”,4)),x4=c(NaN,2,3,NA),stringsAsFactors=F);data[is.na(data)]
data[is.na(data)]na实际上是NaN的。。也许这就是问题所在?似乎更有可能是字符串值,比如
“NA”
,而不是
NA
NaN
值应以相同的方式处理。下面是一个小示例
data=data.frame(x1=c(1,2,3,4),x2=c(1,NA,2,NA),x3=as.character(c(“NaN”,2,“NA”,4)),x4=c(NaN,2,3,NA),stringsAsFactors=F);数据[is.na(数据)]