簡體   English   中英

基於 R 中另一列的列的所有組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM