我有一个命名向量列表 L 。例如,第一个元素:
> L[[1]]
$event
[1] "EventA"
$time
[1] "1416355303"
$city
[1] "Los Angeles"
$region
[1] "California"
$Locale
[1] "en-GB"
when I unlist
列表中的每个元素生成的向量如下所示(对于前 3 个元素):
> unlist(L[[1]])
event time city region Locale
"EventA" "1416355303" "Los Angeles" "California" "en-GB"
> unlist(L[[2]])
event time Locale
"EventB" "1416417567" "en-GB"
> unlist(L[[3]])
event properties.time
"EventM" "1416417569"
我的列表中有超过 50 万个元素,每个元素最多有 42 个这样的特征/名称。我必须将它们合并到一个数据框中,考虑到它们的名称,并且并非所有它们都具有相同数量的功能或名称(在上面的示例中,V2 没有关于region
and city
)。目前,我所做的是循环整个列表:
df1 <- merge(stack(unlist(L[[1]])), stack(unlist(L[[2]])),
by = "ind", all = TRUE)
suppressWarnings(for (i in 3:length(L)){
df1 <- merge(df1, stack(unlist(L[[i]])), by = "ind", all = TRUE)
})
df1 <- as.data.frame(t(df1))
对于上面的示例,返回:
V1 V2 V3 V4 V5
ind city event Locale region time
values.x Los Angeles EventA en-GB California 1416355303
values.y <NA> EventB en-GB <NA> 1416417567
values <NA> EventM <NA> <NA> 1416417569
这就是我想要的。但是,请记住列表的长度以及每次执行命令时的事实:
df1 <- merge(df1, stack(unlist(L[[i]])), by = "ind", all = TRUE)
运行,加载整个数据帧(df1),循环需要很长时间。因此,我想知道是否有人知道更好/更快的编码方法。换句话说。给定一长串不同长度的命名向量,是否有一种快速方法将它们合并到如上所述的数据帧中。
例如,有没有一种方法可以使用foreach
and %dopar%
?无论如何,任何更快的方法都是受欢迎的。