Json列表没有正确地“扁平化”

时间:2017-10-13 16:44:37

标签: json r list

我在数据框的列中有以下列表。

如您所见,变量通过项目发生变化。列affilications并不总是存在。

我一直在尝试将flatten列表添加到数据框或list of 3,但我正在为每个列的所有元素设置一个columg。

我有没有办法告诉R每个元素有3列,而第一个元素并不总是存在,并用let {s} null填充它。

[[1]]
NULL

[[2]]
        affiliations author_id     author_name
1 Punjabi University  780E3459     munish puri
2 Punjabi University  48D92C79 rajesh dhaliwal
3 Punjabi University  7D9BD37C       r s singh

[[3]]
  author_id         author_name
1  7FF872BC barbara eileen ryan

[[4]]
  author_id      author_name
1  0299B8E9 fraser j harbutt

[[5]]
  author_id        author_name
1  7DAB7B72 richard m freeland

[[6]]
NULL

当我尝试压扁它时,这就是我所得到的。

              authors
1  Punjabi University
2  Punjabi University
3  Punjabi University
4            780E3459
5            48D92C79
6            7D9BD37C
7         munish puri
8     rajesh dhaliwal
9           r s singh
10           7FF872BC

但我真正需要的是:

[[1]] NULL

[[2]]affiliations author_id     author_name
1 Punjabi University  780E3459     munish puri
2 Punjabi University  48D92C79 rajesh dhaliwal
3 Punjabi University  7D9BD37C       r s singh

[[3]] NULL   author_id         author_name
1     NULL   7FF872BC barbara eileen ryan

1 个答案:

答案 0 :(得分:1)

我理解你的正确数据如下:

require(tidyverse)

list(
  NULL,
  tibble(a=c(2, 2), b=c(2, 2), c=c(2, 2)),
  tibble(b=3, c=3)
)

所以:

[[1]]
NULL

[[2]]
# A tibble: 2 x 3
      a     b     c
  <dbl> <dbl> <dbl>
1     2     2     2
2     2     2     2

[[3]]
# A tibble: 1 x 2
      b     c
  <dbl> <dbl>
1     3     3

使用bind_rows会导致:

bind_rows(list(
  NULL,
  tibble(a=c(2, 2), b=c(2, 2), c=c(2, 2)),
  tibble(b=3, c=3)
))

# A tibble: 3 x 3
      a     b     c
  <dbl> <dbl> <dbl>
1     2     2     2
2     2     2     2
3    NA     3     3