从列表3中选择唯一值

时间:2016-10-07 12:46:11

标签: r

我想列出长度为3的向量的所有唯一组合,其中向量的每个元素可以在1到9之间。

首先,我列出所有这些组合:

df <- expand.grid(1:9, 1:9, 1:9)

然后我想删除包含重复的行。 例如:

1 1 9
9 1 1
1 9 1

只应包括一次。

换句话说,如果两行具有相同的数字和相同数量的每个数字,那么它应该只包括一次。

请注意 8 8 89 9 9只要出现一次就可以了。

2 个答案:

答案 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)),])

以下是做了什么:

  1. 获取每行唯一元素的数量
  2. 包括两个步骤:
    • rbind的第一个参数:长度为1的那些参数(例如1 1 17 7 7等)或3(例如5 8 72 4 9等)包括在最终结果res中。
    • rbind的第二个论点:对于那些唯一元素的数量为2(例如1 1 93 5 3等),我们每行应用产品和采取其独特的产品(例如,3 3 53 5 35 3 3的产品相同)