【发布时间】:2018-11-29 15:41:48
【问题描述】:
我有一些冲销交易的交易级别数据。这些交易以负数表示,然后以正数表示。
trnx_df <- data.frame(Date = c("2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-03", "2018-01-03", "2018-01-05", "2018-02-01",
"2018-02-01", "2018-02-01"),
Product = c("A", "A", "A", "A", "B", "B", "B", "A", "A", "A"),
Amount = c(-1000, 1000, 1000, 1000, -1000, 1000, 500, -2000, 1000, 2000))
trnx_df
Date Product Amount
1 2018-01-01 A -1000
2 2018-01-01 A 1000
3 2018-01-01 A 1000
4 2018-01-01 A 1000
5 2018-01-03 B -1000
6 2018-01-03 B 1000
7 2018-01-05 B 500
8 2018-02-01 A -2000
9 2018-02-01 A 1000
10 2018-02-01 A 2000
我想得出该客户在特定产品上花费的总金额和最高金额。
通过使用 dplyr 我到达:
library(dplyr)
trnx_summary <- trnx_df %>%
group_by(Product) %>%
summarize(Total_amount = sum(Amount),
Max_amount = max(Amount))
trnx_summary
Product Total_amount Max_amount
1 A 3000 2000
2 B 500 1000
总的来说不会有问题,因为负数会抵消正数,但对于花费的最大金额,我会得到错误的输出。
产品 A 的最大数量应为 1000(2000 和 -2000 将相互抵消)。
我该如何解决这个问题?另外,有没有办法从 dataframe 本身中删除这些冲销交易?
【问题讨论】:
-
"reversal transactions"这是否意味着如果有
1000和-1000,那么忽略那些行? -
是的。我们应该忽略那些行
-
如果交易被取消,你怎么知道哪个?
-
负数表示取消的金额,但作为交易条目,正负都被捕获
标签: r dataframe dplyr data-cleaning