R-将null更改为na列表中的NA,而无需转换



我有一个我正在变成数据框的列表。该列表来自API,并包含一些NULL值。这里和这里的此主题都有一些疑问,但是它们要么处理数据范围,要么在第二个链接中,鼓励OP首先转换为DataFrame。我想保持列表结构。

我正在以以下方式解析它,这是一些示例数据:

example <- list(
  list(
    ID = "1",
    Name = "Joe",
    Middle_name = "Alan",
    Surname = "Smith"
  ),
  list(
    ID = "2",
    Name = "Sarah",
    Middle_name = NULL,
    Surname = "Jones"
  ),
  list(
    ID = "3",
    Name = "Robert",
    Middle_name = "Myles",
    Surname = "McDonnell"
  )
)
N <- NA_character_
df <- tibble::tibble(
  id = purrr::map_chr(example, .null = N, "ID"),
  name = purrr::map_chr(example, .null = N, "Name"),
  middle = purrr::map_chr(example, .null = N, "Middle_name"),
  surname = purrr::map_chr(example, .null = N, "Surname")
)

> df
# A tibble: 3 x 4
     id   name middle   surname
  <chr>  <chr>  <chr>     <chr>
1     1    Joe   <NA>     Smith
2     2  Sarah   <NA>     Jones
3     3 Robert   <NA> McDonnell

看来此问题在purrr repo中具有一些历史记录,但是当我使用 is_empty()compact()之类的purrr函数时,我会遇到错误,要么不起作用。

有人知道我如何实现这一目标,最好是通过保持tibble&amp;我正在使用的map_chr方法?

您的示例确实可以与 purrr 的开发版本一起使用。

NULL行正在引起方法,例如使用dplyr::bind_rows等方法,否则可以将列表列表折叠成tibble。删除NULL行的一个工作方法是循环浏览和flatten每个列表。通过map_df循环绑定行并给出所需的结果。

map_df(example, flatten)
# A tibble: 3 x 4
     ID   Name Middle_name   Surname
  <chr>  <chr>       <chr>     <chr>
1     1    Joe        Alan     Smith
2     2  Sarah        <NA>     Jones
3     3 Robert       Myles McDonnell

相关内容

  • 没有找到相关文章

最新更新