如何用 NA(缺失值)而不是 NA 字符串替换数据框中的空字符串
How to replace empty strings in a dataframe with NA (missing value) not NA string
我有一个巨大的 xlsx 文件,其中有很多空白或空单元格,我将文件保存为 csv,所有空白都按原样保存。
当我导入 csv 文件时,我在数据集中看到很多空 strings/blanks,其中一个列是 boat
我可以去使用 readxl 包的函数,例如 read_xls 或 read_xlsx,这将用 NA
替换空字符串
但我想知道是否有办法在加载到数据帧中的 R 后替换空字符串。
我试过这种方式,但它抛出了错误,我不太明白。
我可以在下面的代码中的 'NA' 中指定 NA,然后它将替换为 NA 但那将是字符串 (NA) 而不是缺失值 NA,两者都会不同。
titanic %>% mutate(boat = if_else(boat=="", NA ,boat))
Error in mutate_impl(.data, dots) :
Evaluation error: `false` must be type logical, not character.
通过仅指定 NA
,根据 ?NA
-"NA is a logical constant of length 1 which contains a missing value."
class
可以勾选
class(NA)
#[1] "logical"
class(NA_character_)
#[1] "character"
并且它们都由标准函数识别,例如is.na
is.na(NA)
#[1] TRUE
is.na(NA_character_)
#[1] TRUE
if_else
是类型敏感的,所以不用指定 NA
哪个 returns 是逻辑输出,它可以指定为 NA_real_
、NA_integer_
, NA_character_
取决于 'boat' 列的类型。假设'boat'是character
class,我们可能需要NA_character_
titanic %>%
mutate(boat = if_else(boat=="", NA_character_ ,boat))
您可以使用 naniar
包将指定值替换为 NA - http://naniar.njtierney.com/
df <- data.frame(boat = c(1, 2, "", 3), category = c("a", "b", "c", "d"))
df
#> boat category
#> 1 1 a
#> 2 2 b
#> 3 c
#> 4 3 d
library(naniar)
df %>% replace_with_na(replace = list(boat = ""))
#> boat category
#> 1 1 a
#> 2 2 b
#> 3 <NA> c
#> 4 3 d
# You can also specify how to do this for a specific, using the development
# version - devtools::install_github('njtierney/naniar')
df %>% replace_with_na_at(.vars = "boat", ~.x == "")
#> boat category
#> 1 2 a
#> 2 3 b
#> 3 NA c
#> 4 4 d
如果您需要任何说明,请告诉我!
我有一个巨大的 xlsx 文件,其中有很多空白或空单元格,我将文件保存为 csv,所有空白都按原样保存。
当我导入 csv 文件时,我在数据集中看到很多空 strings/blanks,其中一个列是 boat
我可以去使用 readxl 包的函数,例如 read_xls 或 read_xlsx,这将用 NA
替换空字符串但我想知道是否有办法在加载到数据帧中的 R 后替换空字符串。
我试过这种方式,但它抛出了错误,我不太明白。 我可以在下面的代码中的 'NA' 中指定 NA,然后它将替换为 NA 但那将是字符串 (NA) 而不是缺失值 NA,两者都会不同。
titanic %>% mutate(boat = if_else(boat=="", NA ,boat))
Error in mutate_impl(.data, dots) :
Evaluation error: `false` must be type logical, not character.
通过仅指定 NA
,根据 ?NA
-"NA is a logical constant of length 1 which contains a missing value."
class
可以勾选
class(NA)
#[1] "logical"
class(NA_character_)
#[1] "character"
并且它们都由标准函数识别,例如is.na
is.na(NA)
#[1] TRUE
is.na(NA_character_)
#[1] TRUE
if_else
是类型敏感的,所以不用指定 NA
哪个 returns 是逻辑输出,它可以指定为 NA_real_
、NA_integer_
, NA_character_
取决于 'boat' 列的类型。假设'boat'是character
class,我们可能需要NA_character_
titanic %>%
mutate(boat = if_else(boat=="", NA_character_ ,boat))
您可以使用 naniar
包将指定值替换为 NA - http://naniar.njtierney.com/
df <- data.frame(boat = c(1, 2, "", 3), category = c("a", "b", "c", "d"))
df
#> boat category
#> 1 1 a
#> 2 2 b
#> 3 c
#> 4 3 d
library(naniar)
df %>% replace_with_na(replace = list(boat = ""))
#> boat category
#> 1 1 a
#> 2 2 b
#> 3 <NA> c
#> 4 3 d
# You can also specify how to do this for a specific, using the development
# version - devtools::install_github('njtierney/naniar')
df %>% replace_with_na_at(.vars = "boat", ~.x == "")
#> boat category
#> 1 2 a
#> 2 3 b
#> 3 NA c
#> 4 4 d
如果您需要任何说明,请告诉我!