【问题标题】:Row bind nested dataframe within list行绑定列表中的嵌套数据框
【发布时间】:2020-05-04 18:29:49
【问题描述】:

我希望有人可以帮助我解决我遇到的问题。我有一个列表格式的json 响应。

结构是一个列表。在每个列表中都有一列玩家。它嵌套在每个列表中

df[[1]]$body$wildcards$players

players 列是每个列表中的嵌套df。我将如何绑定嵌套df 的玩家列以获取完整列表?

以下截图的代表。

sample <- list(
  list(
    body = list(
      wildcards = list(
        players = data.frame(
          firstname = c("Fernando", "Jon"),
          throws = c("L", "R")
        )
      ),
      statusMessage = "OK",
      statusCode = 200
    )
  ),
  list(
    body = list(
      wildcards = list(
        players = data.frame(
          firstname = c("Eduardo", "James"),
          throws = c("L", "R")
        )
      ),
      statusMessage = "OK",
      statusCode = 200
    )
  )
)

这是结构的屏幕截图:

输出df

tibble::tribble(
  ~firstname, ~throws,
  "Fernando",     "L",
       "Jon",     "R",
   "Eduardo",     "L",
     "James",     "R"
  )

【问题讨论】:

  • 是否可以创建一个模拟问题的小示例进行测试
  • 我添加了一个示例列表。
  • 这个的预期输出是什么
  • 你需要tibble(col1 = sample) %&gt;% unnest(c(col1)) %&gt;% unnest_wider(c(col1)) %&gt;% unnest(c(wildcards)) %&gt;% unnest(c(wildcards))
  • 添加了输出 df。我正在寻找从列表中两个列表中的玩家行绑定 df。

标签: r tidyr purrr


【解决方案1】:

我们可以使用pluckmap

library(purrr)
map_dfr(sample, ~ pluck(.x, 'body', 'wildcards','players'))
#  firstname throws
#1  Fernando      L
#2       Jon      R
#3   Eduardo      L
#4     James      R

【讨论】:

    【解决方案2】:

    假设您在每个数据框中都有相同的列名:

    library(data.table)
    new_df <- rbindlist(lapply(df,function(x)x$body$wildcards$players),use.names=T,fill=T)
    

    请注意,每个 df 中的列数不同,因此使用 fill=T 参数,您的数据框中将有 NAs。

    这能解决你的问题吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2016-05-23
      • 2014-05-02
      相关资源
      最近更新 更多