我有一个非常类似于此处描述的问题:
我试图安排一个研讨会,将召开五次会议。我有十天可以选择会议日期,每一天都有三个可能重叠的会议时间。因此,我将30列分为十组(天),每组三列(会议时间)。我需要根据以下条件选择5列(或会议日期-时间组合):每天仅选择一个会议时间(每组一个列);可以参加所有5次会议的受访者(行)数量已最大化。理想情况下,如果我放宽受访者必须参加所有5次会议,仅要求他们参加4次或3次等的标准,我也想知道最佳的栏选择如何变化。
为了进行简单的可视化,假设我想知道我应该选择哪两列(V1,V2和V3中的每列不超过一列),这样我就可以将不带零的行数最大化(即,行总和为2)。
V1A V1B V1C V2A V2B V2C V3A V3B V3C
1 0 1 0 1 1 1 0 1
1 1 0 0 1 1 0 1 1
0 0 1 1 1 0 0 1 1
1 1 1 1 0 0 1 0 0
1 0 0 0 1 1 0 1 0
0 1 1 0 1 1 0 0 0
1 0 1 1 1 0 1 0 1
实际数据在这里:https : //drive.google.com/file/d/0B03dE9-8088aMklOUVhuV3gtRHc/view组是mon1 * tue1 * [mon2 * tue2 * [...] fri2 *。
如果不是需要从组中选择列的情况,则在上面的链接中建议的代码将解决我的问题。理想情况下,我还可以说出在较弱的条件下(行总和为5或4或3,等等),在较弱的条件下应该选择哪些列以使行数最大化。
非常感谢!
您可以rowSums
用来获取大于或等于两个1的行的索引。(条件不是很清楚)
lapply(split(names(df),sub('.$', '', names(df))),
function(x) which(rowSums(df[x])>=2))
#$V1
#[1] 1 2 4 6 7
#$V2
#[1] 1 2 3 5 6 7
#$V3
#[1] 1 2 3 7
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句