【发布时间】:2016-03-21 14:58:07
【问题描述】:
我正在寻找将所有 100000 个列表合并到数据框中的最快方法。 union all 不是 do.call(rbind) 问题,因为我想将输出放在一列中并添加组中每个列表的最小值(为了更好地理解输出,请参见下面的代码)。
我尝试了两种不同的东西,但它们很慢,所以我正在使用 data.table 或 dplyr 或任何可以让它变得更好的东西来搜索。
重现我想要的示例:
a <- c(1:3)
b <- c(12:20)
relations <- list(a,b)
使用我尝试过的两种不同解决方案输出。
1 - 解决方案基本上将数据帧与列表元素上的 rbind 循环连接:
full_group <- NULL
for(i in 1:length(relations))
{
full_group = rbind( full_group,
data.frame( id = relations[[i]] ,
group = min( relations[[i]])) )
print(i)
}
2 解决方案:连接向量,然后从结果中创建一个数据框:
full_group <- NULL
groups <- NULL
id <- NULL
for(i in 1:length(relations))
{
id <- c(id , relations[[i]] )
groups <- c( groups , rep( min(relations[[i]]) , length(relations[[i]]) ) )
print(i)
}
full_group = data.frame( id = id ,
groups = groups )
【问题讨论】:
-
您可以等效地分别使用
unlist(relations)和rep(sapply(relations, min), lengths(relations)),而不是重新分配“id”和“groups”。 -
阅读
data.table::rbindlist,相关的SO问题:stackoverflow.com/questions/15673550/…
标签: r