- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 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/
我对条件总和有点头疼。环顾四周,但似乎不太明白。 这是我的逻辑: 如果 A2 包含字母 P 以外的任何内容,我想在 D2 中返回 =B2-C2。 但是,如果 A2 包含字母 P,我想在 D2 中返回
我试图通过在 SUMIF 函数中使用条件列表来简化 SUMIFS 公式。然而,我的 SUMIF 公式似乎只考虑第一个标准。我缺少什么?请参阅下面的图像和公式。 =SUMIFS(C1:C10,B1:B1
我需要通过单元格引用传递一个多标准列表(一个常量数组),而不是将其硬输入到我的公式中。 所以,而不是这个:=SUM(SUMIFS(sum_range,criteria_range,{"red","bl
我正在尝试创建一个电子表格,该电子表格允许我根据某个单元格(“A36”)是否相当于“N95”或“N64”以及范围(G35:G46)来发送电子邮件等于或大于“56”。我过去通过使用 IF(SUMIF()
所以我有以下公式: =sumif(Gx:Gy,50,Px:Py) 其中 x 和 y 是我输入的数字。 但是,我希望上述公式中的数字由另一个单元格中的值确定(假设 x 由单元格 A1 中的值确定,y 由
尝试使用 SUMIFS、INDEX 和 MATCH 的组合,但公式仅返回第一列的值并忽略共享相同字段的后续列。请问我可以用什么公式来解决这个问题? A B C
我遇到错误代码 1004 的问题。我试图在我的 VBA 代码中使用 SUMIF 公式。我的目标是将 F2 中的 F 列求和到最后一行。该列的 Vlookup 值包括“#N/A”。没有 VBA 使用的公
我为我的工作创建了时间日志: 为了更好地说明,我附上图片如下: 其中 start 和 end 是我在 A 列中启动特定任务的时间,delta 是 End 和 Start 中的值之间的差异。 在下一张表
我在 Worksheet1 上的当前公式如下: SUMIF(Setup!$C$5:$C$375,"C-R",'PMS Input'!$K$13:$K$416) 在设置工作表上,我已确认 C 列中只有一
我对 VBA 很陌生,所以请在这里耐心等待。 我需要根据几个列标题进行总和,这些列放置的位置总是不同的(例如,FRT 列可能一次位于 B 列,另一次位于 D 列)。 然而,这三个组件总是相同的,但可以
在 excel 中,我希望从该数字开始计算列中每个数字的倒数之和。 下面工作正常: 例如:第二列中每个单元格的以下公式 =SUM(1/A1:A6) =SUM(1/A2:A6) . . 但是,如果我有一
我正在尝试在 excel 中使用 SUMIFS() 公式从表中排除某些行,但条件范围包括存储为文本的数字。 在下图中,我想排除实体 ID 为“101000”的行。我尝试过的 SUMIFS() 公式都提
我想要一个 sumifs 公式,它指的是可能变量的列表,即不同的帐号。我更愿意这样做,而不是像个人那样硬编码 如此有效地为每个帐户代码做一个 sumifs 并将它们添加到一个单元格中。我知道我可以有效
我有一个如下表: X 1 X 3 X 2 Y 2 Y 5 Z 3 Z 4 我知道我可以使用 SUMIF 来计算第一列中每个值的第二列的总和,例如 =SUMIF(A1:A7,"X",B1:B7) 会给我
嗨,你们这些了不起的人 更新 你知道吗,我应该让你知道我实际上是在尝试用数字而不是字母来做到这一点。例如,我有一个值为 225566 的字段,我正在尝试挑选其中包含 55 的字段。直到现在我才意识到这
我正在尝试汇总 D 列中在主要或次要类别中为"is"的所有数据,但仅包括该值的第一个实例。在下面的示例中,总和为 3(A 为 1,B 为 2)。请帮忙!! Area Primary Site
这个问题在这里已经有了答案: SUMIF with OR criteria (5 个回答) 5年前关闭。 我试图找出一个 SUMIFS 公式,其中多标准范围可能包含也可能不包含零。以下表为例。 |Ti
我正在尝试创建一个 SumIf 公式,该公式根据一个标准将多个列添加在一起。 =sumif(F$8:F$58,F73,L$8:L$58+I$8:I$58) 这给了我一个错误,并且不会将两列加在一起。
我有一张这样的 table : #+NAME: ENTRY |------+--------| | Item | Amount | |------+--------| | A | 100
我有一组数据,如果员工属于某个组,我想在其中添加工资金额。 现在,有 8 个组 A 到 H,我可以使用 sumifs 排除 E 到 H,如下所示: =SUMIFS($Q$3:$Q$119,$M$3:$
我是一名优秀的程序员,十分优秀!