【问题标题】:merge list of dataframes into one dataframe with id [duplicate]将数据框列表合并到一个具有 id 的数据框 [重复]
【发布时间】:2018-08-27 13:30:14
【问题描述】:

我有一个数据框,其中参与者的 id 作为第一列,他们的响应作为 json 数组作为第二列。 所以它基本上是一个包含 240 个观察的数据框:240 个参与者代码和 240 个数组,每个观察中有 13 个响应,每个观察可以转换为 3X10 数组 看起来像这样:

我使用 jsonlite::fromJSON 将 json 转换为数据帧,结果我得到了一个 data.frames 列表(为简单起见缩短了):

[[1]]
   case_n  d1  d2
1      13   0 100
2      12 100   0
3      11   0 100

[[2]]
   case_n  d1  d2
1      12  50  50
2       8  50  50
3       3  50  50


[[3]]
   case_n d1 d2
1      11 50 50
2       7 50 50
3      13 50 50

我知道这些可以合并到一个包含所有数据帧的大型数据帧中,例如使用 plyr::ldply

df <- ldply(converted_json, data.frame)

如何正确地将这个扩展的df 与初始的participant.code 合并?

所以想要的结果是这样的;

partcode   case_n d1 d2
8pdpaqyv      11 50 50
8pdpaqyv       7 50 50
8pdpaqyv      13 50 50
3q8o3mry      11 50 50
3q8o3mry       7 50 50
3q8o3mry      13 50 50
1kueczzz      11 50 50
1kueczzz       7 50 50
1kueczzz      13 50 50

更新:任务与question 有点不同,因为我还需要存储初始数据中的 id。

【问题讨论】:

  • 预期输出中的100在哪里
  • @A.Suliman:刚刚添加了一个解释,为什么它不是纯副本
  • @PhilippChapkovski 该问题的两个答案解释了如何添加这些 ID。
  • @A.Suliman:它不在正文中,而是在某些答案的 cmets 中,但是好的,你是对的。我可以删除这个。

标签: r dplyr plyr


【解决方案1】:

dplyr::bind_rows 应该做你想做的(它绑定列表元素)。您必须为.id 传递额外的参数。要制作这个.id,您必须命名列表元素。

# Name list elements
names(converted_json) <- dataOriginal$participant.code
# bind rows and add .id
library(dplyr)
bind_rows(converted_json, .id = "partcode")

【讨论】:

  • 请不要发布被问了数百次的问题的答案,将其标记为重复。这样您将帮助 OP 找到更多的答案和丰富的讨论。
猜你喜欢
  • 2017-10-21
  • 2021-09-02
  • 1970-01-01
  • 2015-04-18
  • 2016-12-23
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多