R 选择多个NA';数据帧的不同行和列中的
我有一个数据框,有12000行和35列,在不同的行或列中有多个NA 我想创建一种ifelse函数来选择并将其更改为值(如“0”或“9999”) 我的问题是,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
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.
数据Adplyr
解决方案:
对于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.
Adplyr
解决方案:
对于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(数据)]