假设我有一个名为list_df_A的data.frame的嵌套列表,它具有以下结构:
$ :'data.frame': 1 obs. of 3 variables:
..$ a :chr a1
..$ b :chr b1
..$ c :chr c1
$ :'data.frame': 3 obs. of 3 variables:
..$ a :chr [1:3] a21 a22 a23
..$ b :chr [1:3] b21 b22 b23
..$ c :chr [1:3] c21 c22 c23
$ :'data.frame': 1 obs. of 3 variables:
..$ a :chr a3
..$ b :chr b3
..$ c :chr c3
所以,如果我将它们绑定到data.table / data.frame:
list_df_A <- rbindlist(list_df_A)
list_df_A将如下所示:
a b c
1: a1 a2 a3
2: a21 b21 c21
3: a22 b22 c22
4: a23 b23 c23
5: a3 b3 c3
现在,我有另一个清单。此列表实际上是json文件的根。 让我称这个列表list_root具有以下结构:
chr [1:3] "type1" "type2" "type3"
如果我将其设为data.table / data.frame:
list_root <- as.data.table(list_root)
我得到这张表
V1
1: type1
2: type2
3: type3
现在的问题是:我知道 list_root 中的type2在 list_df_A 中有3条记录。这是因为每个&#34;类型&#34;是指 list_df_A
中的一个数据框如何告诉R何时将两个data.table结合起来,它会显示这样的内容?
V1 a b c
1: type1 a1 a2 a3
2: type2 a21 a21 a21
3: type2 b22 b22 b22
4: type2 c23 c23 c23
5: type3 a3 b3 c3
从某种意义上说,第2,3,4行属于type2?
答案 0 :(得分:0)
在rbindlist之前,您可以使用mapply为每个数据框提供一个外部向量
my_list <- mapply(`[<-`, my_list, 'colname', value = list_root , SIMPLIFY = FALSE)
然后,只是对所有人进行调整。
答案 1 :(得分:0)
我对此的回答是:
我们使用.id作为键来合并两个数据帧/数据表。
对于list_root,我们首先将其转换为可数据格式,然后使用&#34; .id&#34;添加一列。所以我们有一把钥匙:
list_root <- as.data.table(list_root)[, .id := seq(1, nrow(list_root),1)]
接下来我可以在list_df_A上使用rbindlist:
list_df_A <- rbindlist(list_df_A, use.names=TRUE, fill=TRUE, idcol=TRUE)
现在两者都有一个共同的密钥&#34; .id&#34;然后我们可以执行合并:
new_dt <- merge(list_root, list_df_A, on=".id")
我们得到了所需的结果:
V1 a b c .id
1: type1 a1 a2 a3 1
2: type2 a21 a21 a21 2
3: type2 b22 b22 b22 2
4: type2 c23 c23 c23 2
5: type3 a3 b3 c3 3
答案 2 :(得分:0)
您可以设置列表的名称,然后使用idcol
参数,如下所示:
names(list_df_A) <- list_root
rbindlist(list_df_A,idcol = "id")