我有一个数据框,其中包含个人之间的货币交易。交易可以是双向的,即A可以向B转账,B也可以向A转账。数据帧的结构如下:
From To Amount
A B $100
A C $40
A D $30
B A $25
B C $70
C A $190
C D $110
我想总结每对相互进行交易的个人之间的交易总量,结果应该类似于:
Individual_1 Individual_2 Sum
A B $125
A C $230
A D $30
B C $70
C D $110
我尝试利用包 dplyr
的分组功能,但我认为它不适用于我的情况。
最佳答案
您可以使用 pmin
/pmax
对 From
和 To
列进行排序以及 sum
金额
值。
library(dplyr)
df %>%
group_by(col1 = pmin(From, To),
col2 = pmax(From, To)) %>%
summarise(Amount = sum(readr::parse_number(Amount)))
# col1 col2 Amount
# <chr> <chr> <dbl>
#1 A B 125
#2 A C 230
#3 A D 30
#4 B C 70
#5 C D 110
在基本 R 中使用相同的逻辑,您可以执行以下操作:
aggregate(Amount~col1 + col2,
transform(df, col1 = pmin(From, To), col2 = pmax(From, To),
Amount = as.numeric(sub('$', '', Amount, fixed = TRUE))), sum)
数据
df <- structure(list(From = c("A", "A", "A", "B", "B", "C", "C"), To = c("B",
"C", "D", "A", "C", "A", "D"), Amount = c("$100", "$40", "$30",
"$25", "$70", "$190", "$110")), class = "data.frame", row.names = c(NA, -7L))
关于r - 按组以字符格式汇总金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65535162/