gpt4 book ai didi

r - dplyr:按组汇总(sum)非常慢

转载 作者:行者123 更新时间:2023-12-04 00:27:01 24 4
gpt4 key购买 nike

我有两个数据集:inds (个人)和 hhs (家庭)。
我试图总结所有 inds$incomeUID 分组(唯一 ID)并在 hhs 上创建一个新列是一个家庭中所有个人收入的总和。有些人没有任何收入,在这种情况下,他们对该变量有“NA”。我使用的代码是:

hhs <- left_join(hhs, inds %>% group_by(UID) %>% summarize(hhincome = sum(income, na.rm=TRUE)))
但是,它非常慢。 inds有超过 200 万行, hhs有大约 550k 行。我用过 dplyr对相同数据集中的相似变量进行平均或计数,通常需要 10 秒或更短的时间来完成这项工作。有什么我做错了吗?有没有办法让它更快?
编辑:正如我所说,我用过 dplyer获得平均家庭值(value)而不会出现问题
hhs <- left_join(hhs, inds %>% filter(AGE > 2) %>% group_by(UID) %>% summarize(L_Bilingual = mean(Bilingual, na.rm=TRUE)))
用上面的代码计算均值需要 5 秒。函数有什么特别之处 sum()这使它变慢?

最佳答案

使用下面的假数据,在我的机器上进行汇总和加入大约需要 2 秒,这是一台新的 Macbook Pro。即使使用较慢的机器,它也不应该超过 10 或 15 秒。连接创建的行是否可能比您想象的多得多?如果您提供有关数据结构的更多详细信息,我们可以更具体地说明可能出现的问题。

library(tidyverse)
library(microbenchmark)

# Generate two data frames with only the UID column in common
set.seed(2)
hhs = data.frame(UID=1:550000, replicate(30, runif(550000))) %>%
set_names(c("UID", paste0("V",1:30)))
inds = data.frame(UID=sample(1:550000, 2e6, replace=TRUE),
income=rnorm(2e6, 5e4, 1e4),
replicate(20, rnorm(2e6, 5e4, 1e4)))

microbenchmark(join=left_join(hhs, inds %>% group_by(UID) %>%
summarize(hhincome = sum(income, na.rm=TRUE))),
times=5)

Unit: seconds
expr min lq mean median uq max neval
join 1.924749 1.988773 2.722018 2.0063 2.068044 5.622223 5

关于r - dplyr:按组汇总(sum)非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55717649/

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