如何用NA(缺失值)而不是NA字符串替换数据帧中的空字符串

问题描述 投票:4回答:2

我有一个巨大的xlsx文件,它有很多空白或空单元格,我将文件保存为csv,所有空白都按原样保存。

当我导入csv文件时,我在数据集中看到很多空字符串/空白,其中一个列是船

我可以去使用readxx包的函数,比如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.
r xlsx xls
2个回答
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,而是根据'boat'列的类型指定为NA_real_NA_integer_NA_character_。假设'船'是character类,我们可能需要NA_character_

titanic %>% 
       mutate(boat = if_else(boat=="", NA_character_ ,boat))

1
投票

您可以使用naniar包 - http://naniar.njtierney.com/将指定值替换为NA

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

如果您需要任何澄清,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.