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

sha*_*man 5 xls r xlsx

我有一个泰坦尼克号 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.
Run Code Online (Sandbox Code Playgroud)

akr*_*run 3

通过仅指定NA,根据?NA-“NA 是长度为 1 的逻辑常量,其中包含缺失值。”

可以class检查一下

class(NA)
#[1] "logical"
class(NA_character_) 
#[1] "character"
Run Code Online (Sandbox Code Playgroud)

并且它们都由标准函数识别,例如is.na

is.na(NA)
#[1] TRUE
is.na(NA_character_)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

if_else类型敏感的,因此不必指定 asNA返回逻辑输出,而是可以指定为NA_real_, NA_integer_NA_character_具体取决于 'boat' 列的类型。假设“船”是character一流的,我们可能需要NA_character_

titanic %>% 
       mutate(boat = if_else(boat=="", NA_character_ ,boat))
Run Code Online (Sandbox Code Playgroud)