我有一个巨大的xlsx文件,它有很多空白或空单元格,我将文件保存为csv,所有空白都按原样保存。
当我导入csv文件时,我在数据集中看到很多空字符串/空白,其中一个列是 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.
答案 0 :(得分:3)
根据NA
只指定?NA
- “NA是长度为1且包含缺失值的逻辑常量。”
可以检查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
,而是指定为NA_real_
,NA_integer_
,{{1}取决于'船'栏的类型。假设'船'是NA_character_
级,我们可能需要character
NA_character_
答案 1 :(得分:1)
您可以使用naniar
包 - 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
如果您需要任何澄清,请告诉我们!