我在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条目。请注意,此数据帧中还有许多行(和箱),但此处进行了简化。组合由每个容器中的一个Var1条目组成。我想找到所有容器中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的熟练程度,这个问题似乎足够独特。
任何建议都将不胜感激,谢谢!
我们可以创建具有所有可能组合的数据框
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
#....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句