gpt4 book ai didi

r - 通过R中的不同列值求和

转载 作者:行者123 更新时间:2023-12-04 03:08:46 25 4
gpt4 key购买 nike

我在R中有一个非常大的数据框,想将其他各列中每个不同值的两列相加,例如说我们一天中有多家商店的交易数据框的数据,如下所示

shop <- data.frame('shop_id' = c(1, 1, 1, 2, 3, 3), 
'shop_name' = c('Shop A', 'Shop A', 'Shop A', 'Shop B', 'Shop C', 'Shop C'),
'city' = c('London', 'London', 'London', 'Cardiff', 'Dublin', 'Dublin'),
'sale' = c(12, 5, 9, 15, 10, 18),
'profit' = c(3, 1, 3, 6, 5, 9))

这是:
shop_id  shop_name    city      sale profit
1 Shop A London 12 3
1 Shop A London 5 1
1 Shop A London 9 3
2 Shop B Cardiff 15 6
3 Shop C Dublin 10 5
3 Shop C Dublin 18 9

我想将每个商店的销售和利润加起来:
shop_id  shop_name    city      sale profit
1 Shop A London 26 7
2 Shop B Cardiff 15 6
3 Shop C Dublin 28 14

我目前正在使用以下代码执行此操作:
 shop_day <-ddply(shop, "shop_id", transform, sale=sum(sale), profit=sum(profit))
shop_day <- subset(shop_day, !duplicated(shop_id))

它绝对可以正常工作,但是正如我所说的,我的数据帧很大(我想要求和的数据行为140,000行,37列和近100,000个唯一行),我的代码需要花一些时间才能运行,然后最终说它已经用完了内存。

有谁知道最有效的方法来做到这一点。

提前致谢!

最佳答案

**必填数据表答案**

> library(data.table)
data.table 1.8.0 For help type: help("data.table")
> shop.dt <- data.table(shop)
> shop.dt[,list(sale=sum(sale), profit=sum(profit)), by='shop_id']
shop_id sale profit
[1,] 1 26 7
[2,] 2 15 6
[3,] 3 28 14
>

听起来不错,直到事情变大为止。
shop <- data.frame(shop_id = letters[1:10], profit=rnorm(1e7), sale=rnorm(1e7))
shop.dt <- data.table(shop)

> system.time(ddply(shop, .(shop_id), summarise, sale=sum(sale), profit=sum(profit)))
user system elapsed
4.156 1.324 5.514
> system.time(shop.dt[,list(sale=sum(sale), profit=sum(profit)), by='shop_id'])
user system elapsed
0.728 0.108 0.840
>

如果使用键创建data.table,则可以进一步提高速度:
shop.dt <- data.table(shop, key='shop_id')

> system.time(shop.dt[,list(sale=sum(sale), profit=sum(profit)), by='shop_id'])
user system elapsed
0.252 0.084 0.336
>

关于r - 通过R中的不同列值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782030/

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