gpt4 book ai didi

r - 一种将不同长度的命名向量合并到 R 中的数据框(将名称信息保留为列名)的快速方法

转载 作者:行者123 更新时间:2023-12-05 09:22:23 25 4
gpt4 key购买 nike

我有一个名为 L 的向量列表。例如,第一个元素:

> L[[1]]
$event
[1] "EventA"

$time
[1] "1416355303"

$city
[1] "Los Angeles"

$region
[1] "California"

$Locale
[1] "en-GB"

当我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 的信息城市)。目前,我所做的是遍历整个列表:

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%dopar% 来做到这一点?无论如何,我们欢迎任何更快的方法。

最佳答案

我听说 data.table 包非常快。 rbindlist 非常适合此列表。

library(data.table)
rbindlist(L, fill=TRUE)
# event time city region Locale
# 1: EventA 1416355303 Los Angeles California en-GB
# 2: EventB 1416417567 NA NA en-GB
# 3: EventM 1416417569 NA NA NA

关于r - 一种将不同长度的命名向量合并到 R 中的数据框(将名称信息保留为列名)的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27170805/

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