gpt4 book ai didi

R相当于Excel的 "Sumif(s)"函数跨like列

转载 作者:搜寻专家 更新时间:2023-10-30 22:30:16 25 4
gpt4 key购买 nike

我是 R 的新手(也是这个网站的新手),我想了解如何在有多个标识符(在本例中为两个:PERSON_ID 和 PRODUCT_ID)的情况下跨列聚合数据。

请看下面我的例子。在我的数据框中两个标识符的右侧是包含每周销售数据的五列。我需要汇总每周数据,以便:

1:对具有相同名称的周列进行求和(通常这是我可以在 MS Excel 中使用 sumif/sumifs 函数轻松完成的操作)

2:任何包含相同 PERSON_ID 和 PRODUCT_ID 组合的行也会被汇总。

在这种特殊情况下,请注意 6/2/2017 这周出现在多个列中。同时,PERSON_ID 0003603 对于同一个 PRODUCT_ID 3024 出现了两次。

PERSON_ID    PRODUCT_ID    6/23/2017   6/16/2017   6/9/2017   6/2/2017   6/2/2017
0003603 3024 10.000 5.000 4.000 3.000 2.000
0003603 3024 1.000 2.000 3.000 8.000 1.000
0007654 2111 8.000 3.000 2.000 1.000 0.000
0008885 3025 0.000 0.000 1.000 3.000 9.000
0950645 3024 6.000 5.000 4.000 3.000 2.000

我的实际数据框包含超过 100 万条记录,因此据我所知,使用 data.table 包的方法是理想的。

有人可以阐明如何在 R 中解决这个特定问题吗?

最佳答案

熔化您的数据(整形长)是要走的路。如果我正确理解您的要求,那就是:

x = fread('PERSON_ID    PRODUCT_ID  6/23/2017   6/16/2017   6/9/2017    6/2/2017    6/2/2017
0003603 3024 10.000 5.000 4.000 3.000 2.000
0003603 3024 1.000 2.000 3.000 8.000 1.000
0007654 2111 8.000 3.000 2.000 1.000 0.000
0008885 3025 0.000 0.000 1.000 3.000 9.000
0950645 3024 6.000 5.000 4.000 3.000 2.000',
colClasses = c('character', 'character', rep('numeric', 5L)))

xmlt =
melt(x, id.vars = c('PERSON_ID', 'PRODUCT_ID'),
variable.name = 'week', value.name = 'sales')

xmlt[ , week := as.IDate(week, format = '%m/%d/%Y')]

xmlt[ , .(total_sales = sum(sales)),
keyby = .(PERSON_ID, PRODUCT_ID, week)]
PERSON_ID PRODUCT_ID week total_sales
# 1: 0003603 3024 2017-06-02 14
# 2: 0003603 3024 2017-06-09 7
# 3: 0003603 3024 2017-06-16 7
# 4: 0003603 3024 2017-06-23 11
# 5: 0007654 2111 2017-06-02 1
# 6: 0007654 2111 2017-06-09 2
# 7: 0007654 2111 2017-06-16 3
# 8: 0007654 2111 2017-06-23 8
# 9: 0008885 3025 2017-06-02 12
# 10: 0008885 3025 2017-06-09 1
# 11: 0008885 3025 2017-06-16 0
# 12: 0008885 3025 2017-06-23 0
# 13: 0950645 3024 2017-06-02 5
# 14: 0950645 3024 2017-06-09 4
# 15: 0950645 3024 2017-06-16 5
# 16: 0950645 3024 2017-06-23 6

关于R相当于Excel的 "Sumif(s)"函数跨like列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45046585/

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