我有一个我正在变成数据框的列表。该列表来自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