gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:11:21 27 4
gpt4 key购买 nike

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





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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com