gpt4 book ai didi

r - dplyr - 与 seq_along 内存问题一起变异大数据集

转载 作者:行者123 更新时间:2023-12-04 10:30:19 26 4
gpt4 key购买 nike

我正在使用 dplyr 来操作一个数据框,该数据框在我使用的较小测试集上运行良好。不幸的是,对于大型完整数据集(6 个变量的 845986 obs),我在具有 16 GB RAM 的机器上耗尽了内存。

数据框的相关部分:

> head(df)
V2 name
1 1 A_185
2 8 A_185
3 17 A_185
4 25 A_185
5 33 A_185
6 1 A_123
7 5 A_123
8 13 A_123
9 23 A_123

我正在创建一个新列 id2,它应该包含基于 V2 列并依赖于名称列的连续序列,例如,对于不同的名称,序列必须重新开始。

结果应该是:

> head(df)
V2 name id2
1 1 A_185 1
2 8 A_185 2
3 17 A_185 3
4 25 A_185 4
5 33 A_185 5
6 1 A_123 1
7 5 A_123 2
8 13 A_123 3
9 23 A_123 4

我使用的代码是:

df<-ddply(df, .(name), mutate, id2 = seq_along(V2))

我已经尝试了.parallel=TRUE选项,但仍然无济于事。我可以在任务管理器中观察到 R 进程的 CPU 利用率为 12%(我有 8 个核心),RAM 上升到 12 GB,然后 Linux 终止该进程(R session 在 RStudio 中中止)

一个明显的解决方案是将数据帧拆分为 60-80k 条目的单独 block 并单独处理它们,但也许有一种解决方案可以一次性完成所有这一切?

最佳答案

我们可以使用dplyr中的row_number()

library(dplyr)
df %>%
group_by(name) %>%
mutate(id2 = row_number())
# A tibble: 9 x 3
# Groups: name [2]
# V2 name id2
# <int> <chr> <int>
#1 1 A_185 1
#2 8 A_185 2
#3 17 A_185 3
#4 25 A_185 4
#5 33 A_185 5
#6 1 A_123 1
#7 5 A_123 2
#8 13 A_123 3
#9 23 A_123 4

或者使用 data.table 中的 := 使其更快

library(data.table)
setDT(df)[, id2 := seq_len(.N), by = name]

关于r - dplyr - 与 seq_along 内存问题一起变异大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49669388/

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