首页 > 解决方案 > 基于 R 中的另一列对列的所有组合求和

问题描述

我在 R 中有以下示例数据框:

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。输出看起来像这样:

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 的熟练程度。

任何建议都非常感谢,谢谢!

标签: rdataframecombinations

解决方案


我们可以创建一个包含所有可能组合的数据框

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
#....

推荐阅读