我有一个类似于
TheDF <- data.frame(VarA=rep(c(7, 8, 11, 14), 4), Var2=c(1,1,1,0, 0,2,2,0, 0,0,3,0, 0,0,4,4),
Var3=c(50, 50, 50, 50, 100, 100, 100, 100, 150, 150, 150, 150, 200, 200, 200, 200))
TheDF <- TheDF %>%
filter(Var2>0)
我需要一个解决方案, Select 行的组合,以便每个值Var1
和Var2
只能 Select 一次.
结果将如下所示(在本例中只有一种解决方案)
Var1 Var2
7 1
8 2
11 3
14 4
这是Var1
和Var2
的任意数字.如果存在非唯一的解决方案,例如:
TheDF2 <- data.frame(VarA=rep(c(7, 8, 11, 14), 5), Var2=c(1,1,1,0, 0,2,2,0, 0,0,3,0, 0,0,4,4, 0,0,5,5),
Var3=c(50, 50, 50, 50, 100, 100, 100, 100, 150, 150, 150, 150, 200, 200, 200, 200, 250, 250, 250, 250))
TheDF2 <- TheDF2 %>%
filter(Var2>0)
如果4和5的Var2
个值都满足唯一性要求,则 Select 的结果应以Var3
为基础.所选的Var2
值将为5,因为5的Var3
值为250,而Var4
的值为200,因此:
Var1 Var2
7 1
8 2
11 3
14 5
如果这两个Var3
值相同,这将是一个随机 Select .
如果不可能为一对获得唯一的解决方案,那么就返回唯一的.例如.
TheDF3 <- data.frame(VarA=rep(c(7, 8, 11, 14), 4), Var2=c(1,0,0,0, 0,2,2,0, 3,0,0,0, 0,0,0,4),
Var3=c(50, 50, 50, 50, 100, 100, 100, 100, 150, 150, 150, 150, 200, 200, 200, 200))
TheDF3 <- TheDF3 %>%
filter(Var2>0)
一种解决方案是,使用Var3
个权重:
Var1 Var2
7 3
8 2
14 4
另一种可能的解决方案是:
Var1 Var2
7 3
11 2
14 4
因为两个解的权重之和是相同的.
编辑:我现在倾向于使用类似于combination method的解决方案来获得Var1
和Var2
的每种组合,将值Var1
作为列标题,将值Var2
作为单元格值.使用一个新变量作为该行中Var3
个变量的和,并使用另一个新变量计算该行中重复项的数量.我也不知道如何实现这一点.
在我正在处理的当前示例中,组合的数量是15,972.
编辑2:所需的组合输出将如下所示(使用DF1):
7 8 11 14 Duplicates Weight
[1] 1 1 1 4 2 350
[2] 1 1 2 4 1 400
[3] 1 1 3 4 1 450
[4] 1 1 4 4 2 500
[5] 1 2 1 4 1 400
...
[n] 1 2 4 4 1 550
其中VarA
变成列标题,每行是Var2
个值的每一组合.Duplicates
是行中重复的Var2
个值的数量,权重是给定VarA
值的每个Var2
的权重之和.在我给出的简单示例中,Var2
值内的所有权重都是相同的.实际上,权重是不同的.例如,对于Var2
2,如果VarA
=8,则Var3
值可能是120,如果Var4
=11,则Var3
值可能是245.
在我的用例中,Var1
是年龄,Var2
是学校,Var3
是该年龄段学校的学生数.