将数据帧列表合并到一个带有 id 的数据帧中

merge list of dataframes into one dataframe with id

我有一个数据框,第一列是参与者的 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。

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")