r - 有效地将命名列表转换为 data.frame

标签 r list dataframe

这个问题在这里已经有了答案:





Named List To/From Data.Frame

(4 个回答)


2年前关闭。




我正在寻找一种有效的方式进行以下转换:

示例输入:

ob <- list(a = 2, b = 3)

预期输出:
  key value
1   a     2
2   b     3

当前(详细)解决方案:
data.frame(key = names(ob), value = unlist(ob, use.names = FALSE))

最佳答案

试试 stack

stack(ob)
#  values ind
#1      2   a
#2      3   b

不过,您需要更改名称。使用 setNames
setNames(stack(ob), nm = c("value", "key"))

基准测试

针对@Roland 的评论,stack 似乎确实更有效。出于效率原因,请不要使用 stack 而是 OP 的解决方案。
n <- 1e5
lst <- as.list(seq_len(n))
names(lst) <- paste0("a", seq_len(n))

library(microbenchmark)
benchmark <- microbenchmark(
  snoram = snoram(lst),
  markus = markus(lst), times = 50
)
benchmark
#Unit: milliseconds
#   expr      min       lq     mean   median       uq      max neval
# snoram   2.475258   2.594479   2.739639   2.652843   2.715575   5.92216    50
# markus 114.387692 119.028200 134.745626 137.524606 144.045112 162.11510    50

使用的函数(到目前为止)
snoram <- function(l) {
  data.frame(key = names(l), value = unlist(l, use.names = FALSE),
             stringsAsFactors = FALSE) # this gives a hugh performance gain
                                       # thanks to @Roland
}

markus <- function(l) {
  setNames(stack(l), nm = c("value", "key"))
}

关于r - 有效地将命名列表转换为 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867718/

相关文章:

按值对 geom_bar ggplot2 中的条形图重新排序

python:按索引将列表拆分为n个子列表

java - 如何在迭代时更新bean

python - pandas dataframe merge 是否可以更大或更小地工作?

apache-spark - 如何通过数据帧操作保留分区

r - 拆分和删除分组变量

r - 如何按组加速转置data.frame?

R extrafont 包,依赖项 ‘Rttf2pt1’ 不可用

C#:从列表中获取单个项目 <Custom_Class> 如果列表中存在一个属性值为 ="somevalue"的项目

python - 使用列名获取列值