我想列出长度为3的向量的所有唯一组合,其中向量的每个元素可以在1到9之间。
首先,我列出所有这些组合:
df <- expand.grid(1:9, 1:9, 1:9)
然后我想删除包含重复的行。 例如:
1 1 9
9 1 1
1 9 1
只应包括一次。
换句话说,如果两行具有相同的数字和相同数量的每个数字,那么它应该只包括一次。
请注意
8 8 8
或
9 9 9
只要出现一次就可以了。
答案 0 :(得分:1)
根据您的方法和删除重复的想法:
# table.py
class TargetTable(tables.Table)
class Meta:
model = DModel
fields = ('bmodel__b_name', 'cmodel__c_name', 'cmodel__amodel__a_name', 'cost_sum')
# view.py
from django.db.models import Sum
...
def page(request):
queryset = DModel.objects.values('bmodel__b_name','cmode__c_name', 'cmode__amode__a_name').annotate(cost_sum=Sum('cost'))
table = TargetTable(queryset)
return render(request, 'tartget.html', {'table':table})
可能有更有效的方法,但如果我理解你是正确的,那就是你想要的结果。
答案 1 :(得分:0)
也许这样的事情(因为你的数据框不大,所以它不痛苦!):
len <- apply(df,1,function(x) length(unique(x)))
res <- rbind(df[len!=2,], df[unique(apply(df[len==2,],1,prod)),])
以下是做了什么:
rbind
的第一个参数:长度为1的那些参数(例如1 1 1
,7 7 7
等)或3(例如5 8 7
,2 4 9
等)包括在最终结果res
中。 rbind
的第二个论点:对于那些唯一元素的数量为2
(例如1 1 9
,3 5 3
等),我们每行应用产品和采取其独特的产品(例如,3 3 5
和3 5 3
和5 3 3
的产品相同)