[英]Summing all combinations of a column based on another column in R
我在 R 中有以下示例 dataframe:
Var1 = c("Shirt1", "Shirt2", "Shirt3", "Shirt4", "Pants1", "Pants2", "Pants3", "Jacket1", "Jacket2", "Jacket3")
Var2 = c(1,4,3,4,6,5,2,3,6,2)
Bin = c("A", "A", "A", "A", "B", "B", "B", "C", "C", "C")
MyData = data.frame(Var1, Var2, Bin)
看起來像這樣:
Var1 Var2 Bin
1 Shirt1 1 A
2 Shirt2 4 A
3 Shirt3 3 A
4 Shirt4 4 A
5 Pants1 6 B
6 Pants2 5 B
7 Pants3 2 B
8 Jacket1 3 C
9 Jacket2 6 C
10 Jacket3 2 C
所以有 3 個 bin,每個 bin 中有可變數量的 Var1 條目。 請注意,此數據框中還有更多行(和箱),但在這里進行了簡化。 組合由來自每個 bin 的 Var1 的一個條目組成。 我想在所有 bin 中找到所有可能的 Var1 組合,然后為組合求和 Var2。 output 看起來像這樣:
Bin A Bin B Bin C Sum
Shirt1 Pants1 Jacket1 10
Shirt2 Pants1 Jacket1 13
Shirt2 Pants2 Jacket1 12
Shirt3 Pants1 Jacket2 15
Etc.
雖然我看到了一些類似的線程,但這個問題似乎足夠獨特,至少基於我對 R 的熟練程度。
任何建議都非常感謝,謝謝!
我們可以創建具有所有可能組合的 dataframe
temp <- do.call(expand.grid, split(MyData$Var1, MyData$Bin))
temp
# A B C
#1 Shirt1 Pants1 Jacket1
#2 Shirt2 Pants1 Jacket1
#3 Shirt3 Pants1 Jacket1
#4 Shirt4 Pants1 Jacket1
#5 Shirt1 Pants2 Jacket1
#6 Shirt2 Pants2 Jacket1
#....
然后為每一行子集相關數據和sum
Var2
值。
temp$Sum <- apply(temp, 1, function(x) sum(MyData$Var2[MyData$Var1 %in% x]))
temp
# A B C Sum
#1 Shirt1 Pants1 Jacket1 10
#2 Shirt2 Pants1 Jacket1 13
#3 Shirt3 Pants1 Jacket1 12
#4 Shirt4 Pants1 Jacket1 13
#5 Shirt1 Pants2 Jacket1 9
#6 Shirt2 Pants2 Jacket1 12
#....
您可以按如下方式使用rowsum
:
a <- expand.grid(split(MyData$Var1, MyData$Bin))
cbind(a, Sum = rowsum(MyData$Var2[unlist(a)], c(row(a))))
A B C Sum
1 Shirt1 Pants1 Jacket1 10
2 Shirt2 Pants1 Jacket1 13
3 Shirt3 Pants1 Jacket1 12
4 Shirt4 Pants1 Jacket1 13
5 Shirt1 Pants2 Jacket1 9
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.