r - 将不等长列表的列表转换为数据帧

标签 r json purrr

我有一个从 JSON 获得的不等长度列表的列表,我想将其合并到单个数据帧或一系列数据帧中。举个例子,假设这是在我的原始 JSON 上使用 fromJSON 的结果:

mylist <- list(
  list(
    volume = array(1:6, dim=c(3,2)),
    price = array(c(1,2,3,7,8,9), dim=c(3,2)),
    name = 'A'
  ),
  list(
    volume = array(1:10, dim=c(5,2)),
    price = array(c(1:5,12:16), dim=c(5,2)),
    name = 'B'
  ),
  list(
    volume = array(1:14, dim=c(7,2)),
    price = array(c(1:7,21:27), dim=c(7,2)),
    name = 'C'
  )
)

价格和数量列表的长度不等,我想处理数据,假设给定变量的 n 个观察值是该系列中的最后 n 个条目。因此,对于每个数据列表,我本质上想丢弃第一列并将数据底部对齐。因此表示价格数据的一种方法如下:

tribble(
  ~Day, ~PriceA, ~PriceB, ~PriceC,
  #---|--------|--------|---------
    1L,      NA,      NA,      21,
    2L,      NA,      NA,      22,
    3L,      NA,      12,      23,
    4L,      NA,      13,      24,
    5L,       7,      14,      25,
    6L,       8,      15,      26,
    7L,       9,      16,      27
)

如果这样做,我需要为卷创建一个单独的表。我对表示最终数据集的其他方式持开放态度,例如在数据框中使用嵌套列。

有人知道如何优雅地做到这一点吗?对我来说特别困惑的是使用 purrr/map 对所涉及的二级列表进行操作。

最佳答案

这是一个使用tidyverse的选项

library(tidyverse)
out <- mylist %>%
         transpose %>% 
         map(~ if(all(lengths(.x) == 1)) unlist(.x) else
         map(.x, as_tibble) %>%
           reduce(full_join, by = 'V1') %>%
        mutate_all(funs(.[order(!is.na(.))])))

现在,我们可以提取列表元素

out$price %>%
      set_names(c("Day", paste0("Price", LETTERS[1:3])))
# A tibble: 7 x 4
#    Day PriceA PriceB PriceC
#  <dbl>  <dbl>  <int>  <int>
#1  1.00  NA        NA     21
#2  2.00  NA        NA     22
#3  3.00  NA        12     23
#4  4.00  NA        13     24
#5  5.00   7.00     14     25
#6  6.00   8.00     15     26
#7  7.00   9.00     16     27

关于r - 将不等长列表的列表转换为数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952189/

相关文章:

R - 并行化多个模型学习(使用 dplyr 和 purrr)

R,每次在另一列中满足条件时,从数值列中的相应值和后续值中减去一个值

r - FALSE 与 F : Error mapply's SIMPLIFY argument: in SIMPLIFY=F

json - Nifi Controller 服务JsontreeReader和JsonPath阅读器有什么区别

json - 通过 HTTP POST 编码二进制数据的最有效方法是什么

r - 如何修改嵌套在列表内的数据框而不重新分配

R:对所有列进行 t 检验

在 R 中创建新列时通过变量名引用数据框

php - json解析器空结果

R嵌套tibble map2比较