【问题标题】:Combination with rule与规则相结合
【发布时间】:2020-05-13 06:42:08
【问题描述】:

大家早上好,我有 20 种基因型,我必须按照一些规则将它们报告为组合

规则是每个基因型可以组合一次,例如亲本 12 可以有以下组合

我有一个没有重复的所有可能组合的data.frame 然后我使用此代码执行验证

###Validacao
Validate = c(
  tempGlobal$Macho,
  tempGlobal$Femea
)

Validate = data.frame(stringsAsFactors = F,table(Validate))

我得到以下验证结果

这个结果是正确的,因为每个基因型在组合中只出现一次。

我需要做的是创建一个以这种方式结合所有这些的算法,因为我所做的算法有时不会结合所有内容并忽略其他项目,我尝试了遗传算法,但它需要时间找到解决办法,有时不'似乎没有

我用来执行组合的算法是这样的

 for(i in 1:length(nomesGenotipos)){

    ###Selecionano genotipo
    tempGen = data[data$Macho %in% nomesGenotipos[i],]


    ###Filtrnado genotipos ja selecionados
    if(!is.null(tempGlobal)){

      ##Removendo ja combinados
      NomesRemover = c(tempGlobal$Macho,tempGlobal$Femea)
      tempGen = tempGen[!tempGen$Femea %in% NomesRemover,]

    }

    ###Vericando disponibilida
    ContMacho = which(tempGlobal$Macho %in% nomesGenotipos[i])
    ContFemea = which(tempGlobal$Femea %in% nomesGenotipos[i])

    if(length(ContMacho) <= 0 & length(ContFemea) <= 0){
      tempGlobal = rbind(tempGlobal,tempGen[which.max(tempGen$Contraste),])
    }

  }

【问题讨论】:

  • 我认为如果您将示例缩短,您的问题会更清楚 - 您能否共享具有 5 个 macho 值和 5 个 femea 值的样本数据。然后我们可以更好地了解您想要什么。对于您当前的示例,我感到困惑,因为我在输入中找不到结果中的行。使用更小的输入和更小的结果将更容易理解。
  • 除了 Gregor 的注释之外,提供您的数据框的子集、您尝试过的代码及其产生的错误或不正确的结果以及数据框在什么时候会是什么样子会很有帮助问题已经解决了。这样,有人可以通过在代码中解决它来提出解决方案。谢谢:)

标签: r combinations


【解决方案1】:

我觉得应该可以,其实挺快的

library(tidyverse)

df <- data.table::fread("id   macho  id2    femea  id3       valor
            54  Parental 03 Parental 14 0.025493719
            34  Parental 02 Parental 14 0.024718558
            158 Parental 08 Parental 18 0.024714989
            116 Parental 06 Parental 16 0.024568105
            16  Parental 01 Parental 16 0.024503945
            216 Parental 11 Parental 16 0.024493329
            6   Parental 01 Parental 06 0.024384676
            172 Parental 09 Parental 12 0.023921622
            12  Parental 01 Parental 12 0.023692184
            194 Parental 10 Parental 14 0.023226586
            23  Parental 02 Parental 03 0.022946274
            75  Parental 04 Parental 15 0.022471595
            2   Parental 01 Parental 02 0.022084705
            297 Parental 15 Parental 17 0.022028877
            150 Parental 08 Parental 10 0.021820915
            59  Parental 03 Parental 19 0.021775532
            156 Parental 08 Parental 16 0.021692749
            276 Parental 14 Parental 16 0.021396023
            151 Parental 08 Parental 11 0.021119618
            100 Parental 05 Parental 20 0.021003835
            317 Parental 16 Parental 17 0.020681532
            318 Parental 16 Parental 18 0.020545525
            200 Parental 10 Parental 20 0.020484047
            30  Parental 02 Parental 10 0.020432538
            218 Parental 11 Parental 18 0.020388939
            278 Parental 14 Parental 18 0.020347493
            40  Parental 02 Parental 20 0.019690406
            235 Parental 12 Parental 15 0.019613715
            171 Parental 09 Parental 11 0.019437199
            69  Parental 04 Parental 09 0.019404434
            119 Parental 06 Parental 19 0.018996842
            25  Parental 02 Parental 05 0.018856821
            45  Parental 03 Parental 05 0.018794595
            178 Parental 09 Parental 18 0.018718493
            133 Parental 07 Parental 13 0.018599127
            359 Parental 18 Parental 19 0.018569118
            24  Parental 02 Parental 04 0.018324016
            10  Parental 01 Parental 10 0.018166833
            86  Parental 05 Parental 06 0.017995423
            39  Parental 02 Parental 19 0.017734679
            298 Parental 15 Parental 18 0.017663780
            128 Parental 07 Parental 08 0.017625437
            92  Parental 05 Parental 12 0.017610496
            217 Parental 11 Parental 17 0.017602834
            52  Parental 03 Parental 12 0.017422599
            5   Parental 01 Parental 05 0.017394356
            193 Parental 10 Parental 13 0.017378285
            159 Parental 08 Parental 19 0.017374869
            140 Parental 07 Parental 20 0.017370305
            78  Parental 04 Parental 18 0.017310715
            26  Parental 02 Parental 06 0.017306731
            11  Parental 01 Parental 11 0.017285712
            50  Parental 03 Parental 10 0.016857115
            19  Parental 01 Parental 19 0.016755619
            107 Parental 06 Parental 07 0.016623693
            97  Parental 05 Parental 17 0.016515749
            44  Parental 03 Parental 04 0.016358254
            17  Parental 01 Parental 17 0.016058872
            132 Parental 07 Parental 12 0.015944426
            340 Parental 17 Parental 20 0.015848709
            71  Parental 04 Parental 11 0.015846677
            239 Parental 12 Parental 19 0.015813394
            137 Parental 07 Parental 17 0.015697089
            236 Parental 12 Parental 16 0.015557065
            57  Parental 03 Parental 17 0.015460082
            380 Parental 19 Parental 20 0.015402015
            191 Parental 10 Parental 11 0.015354333
            37  Parental 02 Parental 17 0.015329842
            136 Parental 07 Parental 16 0.014768194
            279 Parental 14 Parental 19 0.014702685
            339 Parental 17 Parental 19 0.014501476
            27  Parental 02 Parental 07 0.014424111
            254 Parental 13 Parental 14 0.014388241
            214 Parental 11 Parental 14 0.014256856
            111 Parental 06 Parental 11 0.014066002
            220 Parental 11 Parental 20 0.013958238
            138 Parental 07 Parental 18 0.013696494
            60  Parental 03 Parental 20 0.013679465
            338 Parental 17 Parental 18 0.013584508
            237 Parental 12 Parental 17 0.013481467
            118 Parental 06 Parental 18 0.013358035
            259 Parental 13 Parental 19 0.013296539
            7   Parental 01 Parental 07 0.013128566
            198 Parental 10 Parental 18 0.013080389
            153 Parental 08 Parental 13 0.013007870
            98  Parental 05 Parental 18 0.012860074
            91  Parental 05 Parental 11 0.012749833
            80  Parental 04 Parental 20 0.012688213
            219 Parental 11 Parental 19 0.012408254
            112 Parental 06 Parental 12 0.012385102
            88  Parental 05 Parental 08 0.012336827
            58  Parental 03 Parental 18 0.012289561
            170 Parental 09 Parental 10 0.012112935
            93  Parental 05 Parental 13 0.011938597
            66  Parental 04 Parental 06 0.011926075
            67  Parental 04 Parental 07 0.011845178
            46  Parental 03 Parental 06 0.011732844
            256 Parental 13 Parental 16 0.011718799
            47  Parental 03 Parental 07 0.011585455
            3   Parental 01 Parental 03 0.011362654
            131 Parental 07 Parental 11 0.011348243
            134 Parental 07 Parental 14 0.011146762
            110 Parental 06 Parental 10 0.011005326
            238 Parental 12 Parental 18 0.010893965
            4   Parental 01 Parental 04 0.010447441
            197 Parental 10 Parental 17 0.010354345
            176 Parental 09 Parental 16 0.010088608
            154 Parental 08 Parental 14 0.009810871
            31  Parental 02 Parental 11 0.009786287
            51  Parental 03 Parental 11 0.009596593
            65  Parental 04 Parental 05 0.009542628
            139 Parental 07 Parental 19 0.009450845
            94  Parental 05 Parental 14 0.009034652
            90  Parental 05 Parental 10 0.009025032
            76  Parental 04 Parental 16 0.008989815
            196 Parental 10 Parental 16 0.008555729
            72  Parental 04 Parental 12 0.008332467
            179 Parental 09 Parental 19 0.008310307
            130 Parental 07 Parental 10 0.008121682
            117 Parental 06 Parental 17 0.007881769
            129 Parental 07 Parental 09 0.006898749
            174 Parental 09 Parental 14 0.006779555
            149 Parental 08 Parental 09 0.006367985
            77  Parental 04 Parental 17 0.006367409
            87  Parental 05 Parental 07 0.006241170
            173 Parental 09 Parental 13 0.005527955
            199 Parental 10 Parental 19 0.005511149
            79  Parental 04 Parental 19 0.005503793
            192 Parental 10 Parental 12 0.005472943
            96  Parental 05 Parental 16 0.005015174
            89  Parental 05 Parental 09 0.004814129
            20  Parental 01 Parental 20 0.004079411
            70  Parental 04 Parental 10 0.004074851
            99  Parental 05 Parental 19 0.003702905
            319 Parental 16 Parental 19 0.003554513")


df_to_pull <- df %>%
  tibble() %>% 
  arrange(-valor) %>% 
  rowid_to_column()




list_ids <- list()
row_ids <- list()

not_in <- `%in%` %>% negate()

for (i in df_to_pull %>% nrow %>% seq_len) {
  id_male = df_to_pull$id2[[i]]
  id_female = df_to_pull$id3[[i]]
  rowid = df_to_pull$rowid[[i]]

  if (id_male %>% not_in(list_ids) & id_female %>% not_in(list_ids)) {
    row_ids <- append(x = row_ids,values = rowid)
    list_ids <- append(x = list_ids,values = id_male)
    list_ids <- append(x = list_ids,values = id_female)

  }


}


df_to_pull %>% filter(rowid %in% row_ids)
#> # A tibble: 10 x 7
#>    rowid    id macho      id2 femea      id3   valor
#>    <int> <int> <chr>    <int> <chr>    <int>   <dbl>
#>  1     1    54 Parental     3 Parental    14 0.0255 
#>  2     3   158 Parental     8 Parental    18 0.0247 
#>  3     4   116 Parental     6 Parental    16 0.0246 
#>  4     8   172 Parental     9 Parental    12 0.0239 
#>  5    12    75 Parental     4 Parental    15 0.0225 
#>  6    13     2 Parental     1 Parental     2 0.0221 
#>  7    20   100 Parental     5 Parental    20 0.0210 
#>  8    35   133 Parental     7 Parental    13 0.0186 
#>  9    44   217 Parental    11 Parental    17 0.0176 
#> 10   127   199 Parental    10 Parental    19 0.00551

reprex package (v0.3.0) 于 2020 年 5 月 12 日创建

【讨论】:

  • 早上好,非常感谢您的回复,但是有没有什么办法可以保证一个父母在整个data.frame中只出现一次例如在这些行#&gt; 1 54 Parental 3 Parental 14 0.025493719 #&gt; 2 34 Parental 2 Parental 14 0.024718558Parental 14出现两次,在这种情况下,父母 2 必须与另一个结合,始终保持为最佳组合,有没有办法做到这一点?
  • 如果您需要将男性添加到不同的检查中,请将代码更改为 distinct(c(id,id2),.keep_all = TRUE) if you need all ids distinct(c(id,id2,id3),.keep_all = TRUE)
  • 如果你需要确保男性和女性是独一无二的,你必须改变这个数据结构我可以改变代码,但我不确定你需要什么
  • Se você quiser te explico em pt sem questiona
  • Boa noite bruno , oque eu estoutentando fazer , e selecionar as melhores combinações sem que um parental apareça mais de uma vez , por exemplo vamos supor que eu tenho os parental 1 , parental 2 , parental 3 e parental 4 vamos supor que a melhor combinação do parental 1 seja com o 2 , então o parental 3 só pode selecionar o 4 , pois o parental 1 e 2 já foi combinado , so que eu tenho que fazer isso mantendo a melhor combinação por exemplo se一个combinado de 1 foi com 3 ele deve ser combinado com o 3 e o 2 combinado com o 4 , deu pra entender ? qual tipo de esttrutura de dados você recomenda?
【解决方案2】:

将此公式化为具有二进制变量的整数规划优化问题,其目标函数是最大化所选组合的对比度总和:

A <- as.matrix(dcast(melt(DT[, rn := .I], id.vars=c("rn", "Contraste")),
    value ~ rn, length)[, value := NULL])
ones <- rep(1L, nrow(A))
ci <- DT$Contraste

library(CVXR)
x <- Variable(ncol(A), integer=TRUE)
prob <- Problem(Maximize(sum(ci * x)), list(x >= 0L, x <= 1L, A %*% x == ones))
result <- solve(prob)
ans <- DT[result$getValue(x)[,1L]==1L]

输出:

          Macho       Femea   Contraste  rn
 1: Parental 02 Parental 15 0.061991665   2
 2: Parental 01 Parental 08 0.048031588   5
 3: Parental 13 Parental 17 0.044067325  10
 4: Parental 06 Parental 14 0.036371303  24
 5: Parental 09 Parental 20 0.032768889  29
 6: Parental 03 Parental 16 0.032268296  31
 7: Parental 11 Parental 12 0.027911306  48
 8: Parental 18 Parental 19 0.018569118  91
 9: Parental 04 Parental 07 0.011845178 151
10: Parental 05 Parental 10 0.009025032 169

数据:

library(data.table)
DT <- fread("Macho,Femea,Contraste
Parental 08,Parental 15,0.0628225489
Parental 02,Parental 15,0.061991665
Parental 11,Parental 15,0.0520751086
Parental 14,Parental 15,0.0484917425
Parental 01,Parental 08,0.0480315879
Parental 08,Parental 20,0.0480098916
Parental 02,Parental 13,0.0472494129
Parental 13,Parental 15,0.0469532789
Parental 06,Parental 13,0.0443463611
Parental 13,Parental 17,0.0440673254
Parental 13,Parental 20,0.0440401616
Parental 09,Parental 15,0.0440300929
Parental 03,Parental 13,0.0411739654
Parental 01,Parental 13,0.0404547979
Parental 15,Parental 20,0.0401336641
Parental 08,Parental 12,0.0394015975
Parental 07,Parental 15,0.0386226841
Parental 03,Parental 08,0.0383263954
Parental 12,Parental 14,0.0378848729
Parental 08,Parental 17,0.0375066354
Parental 02,Parental 12,0.0372399494
Parental 06,Parental 15,0.0371236654
Parental 03,Parental 15,0.0370775111
Parental 06,Parental 14,0.0363713029
Parental 01,Parental 15,0.033741815
Parental 02,Parental 18,0.033672345
Parental 04,Parental 08,0.0333046361
Parental 06,Parental 08,0.0330964111
Parental 09,Parental 20,0.0327688886
Parental 14,Parental 17,0.032388575
Parental 03,Parental 16,0.0322682961
Parental 15,Parental 19,0.0320306079
Parental 11,Parental 13,0.0310351879
Parental 18,Parental 20,0.0301425641
Parental 01,Parental 14,0.0298570025
Parental 01,Parental 09,0.0297884969
Parental 06,Parental 09,0.0296563441
Parental 05,Parental 15,0.0294868041
Parental 02,Parental 08,0.0293625029
Parental 02,Parental 16,0.029328745
Parental 12,Parental 20,0.0293102311
Parental 14,Parental 20,0.0287686166
Parental 03,Parental 09,0.0287177614
Parental 12,Parental 13,0.0286484275
Parental 10,Parental 15,0.0286466789
Parental 09,Parental 17,0.0283792994
Parental 04,Parental 14,0.0280999379
Parental 11,Parental 12,0.0279113064
Parental 16,Parental 20,0.0278745041
Parental 04,Parental 13,0.0273011461
Parental 06,Parental 20,0.0272814079
Parental 15,Parental 16,0.027085715
Parental 13,Parental 18,0.0270359189
Parental 01,Parental 18,0.026398205
Parental 02,Parental 09,0.0263392669
Parental 03,Parental 14,0.0254937186
Parental 02,Parental 14,0.0247185575
Parental 08,Parental 18,0.0247149889
Parental 06,Parental 16,0.0245681054
Parental 01,Parental 16,0.024503945
Parental 11,Parental 16,0.0244933286
Parental 01,Parental 06,0.0243846764
Parental 09,Parental 12,0.0239216225
Parental 01,Parental 12,0.0236921844
Parental 10,Parental 14,0.0232265864
Parental 02,Parental 03,0.0229462741
Parental 04,Parental 15,0.0224715954
Parental 01,Parental 02,0.022084705
Parental 15,Parental 17,0.0220288775
Parental 08,Parental 10,0.021820915
Parental 03,Parental 19,0.0217755316
Parental 08,Parental 16,0.0216927489
Parental 14,Parental 16,0.0213960225
Parental 08,Parental 11,0.0211196179
Parental 05,Parental 20,0.021003835
Parental 16,Parental 17,0.0206815325
Parental 16,Parental 18,0.020545525
Parental 10,Parental 20,0.0204840466
Parental 02,Parental 10,0.0204325379
Parental 11,Parental 18,0.0203889386
Parental 14,Parental 18,0.0203474925
Parental 02,Parental 20,0.0196904061
Parental 12,Parental 15,0.0196137154
Parental 09,Parental 11,0.0194371989
Parental 04,Parental 09,0.0194044341
Parental 06,Parental 19,0.0189968425
Parental 02,Parental 05,0.0188568211
Parental 03,Parental 05,0.0187945954
Parental 09,Parental 18,0.0187184929
Parental 07,Parental 13,0.0185991266
Parental 18,Parental 19,0.0185691179
Parental 02,Parental 04,0.0183240164
Parental 01,Parental 10,0.0181668329
Parental 05,Parental 06,0.0179954229
Parental 02,Parental 19,0.0177346789
Parental 15,Parental 18,0.01766378
Parental 07,Parental 08,0.0176254366
Parental 05,Parental 12,0.0176104961
Parental 11,Parental 17,0.0176028341
Parental 03,Parental 12,0.0174225989
Parental 01,Parental 05,0.0173943561
Parental 10,Parental 13,0.017378285
Parental 08,Parental 19,0.0173748686
Parental 07,Parental 20,0.017370305
Parental 04,Parental 18,0.0173107154
Parental 02,Parental 06,0.0173067314
Parental 01,Parental 11,0.0172857116
Parental 03,Parental 10,0.0168571154
Parental 01,Parental 19,0.0167556189
Parental 06,Parental 07,0.0166236929
Parental 05,Parental 17,0.0165157486
Parental 03,Parental 04,0.0163582541
Parental 01,Parental 17,0.0160588725
Parental 07,Parental 12,0.0159444261
Parental 17,Parental 20,0.0158487086
Parental 04,Parental 11,0.0158466766
Parental 12,Parental 19,0.0158133941
Parental 07,Parental 17,0.0156970886
Parental 12,Parental 16,0.0155570654
Parental 03,Parental 17,0.0154600816
Parental 19,Parental 20,0.0154020154
Parental 10,Parental 11,0.0153543329
Parental 02,Parental 17,0.0153298425
Parental 07,Parental 16,0.0147681941
Parental 14,Parental 19,0.0147026854
Parental 17,Parental 19,0.0145014764
Parental 02,Parental 07,0.0144241111
Parental 13,Parental 14,0.0143882414
Parental 11,Parental 14,0.0142568561
Parental 06,Parental 11,0.0140660016
Parental 11,Parental 20,0.0139582379
Parental 07,Parental 18,0.0136964941
Parental 03,Parental 20,0.0136794654
Parental 17,Parental 18,0.0135845075
Parental 12,Parental 17,0.0134814669
Parental 06,Parental 18,0.0133580354
Parental 13,Parental 19,0.0132965386
Parental 01,Parental 07,0.0131285661
Parental 10,Parental 18,0.0130803889
Parental 08,Parental 13,0.01300787
Parental 05,Parental 18,0.0128600741
Parental 05,Parental 11,0.0127498329
Parental 04,Parental 20,0.0126882129
Parental 11,Parental 19,0.0124082541
Parental 06,Parental 12,0.0123851016
Parental 05,Parental 08,0.0123368266
Parental 03,Parental 18,0.0122895611
Parental 09,Parental 10,0.012112935
Parental 05,Parental 13,0.0119385966
Parental 04,Parental 06,0.011926075
Parental 04,Parental 07,0.0118451779
Parental 03,Parental 06,0.0117328441
Parental 13,Parental 16,0.0117187989
Parental 03,Parental 07,0.0115854554
Parental 01,Parental 03,0.0113626541
Parental 07,Parental 11,0.0113482429
Parental 07,Parental 14,0.0111467616
Parental 06,Parental 10,0.0110053261
Parental 12,Parental 18,0.0108939654
Parental 01,Parental 04,0.0104474414
Parental 10,Parental 17,0.0103543454
Parental 09,Parental 16,0.0100886079
Parental 08,Parental 14,0.0098108714
Parental 02,Parental 11,0.0097862866
Parental 03,Parental 11,0.0095965925
Parental 04,Parental 05,0.0095426279
Parental 07,Parental 19,0.0094508454
Parental 05,Parental 14,0.0090346516
Parental 05,Parental 10,0.0090250316
Parental 04,Parental 16,0.0089898154
Parental 10,Parental 16,0.0085557289
Parental 04,Parental 12,0.0083324666
Parental 09,Parental 19,0.0083103066
Parental 07,Parental 10,0.0081216816
Parental 06,Parental 17,0.0078817689
Parental 07,Parental 09,0.0068987486
Parental 09,Parental 14,0.0067795554
Parental 08,Parental 09,0.006367985
Parental 04,Parental 17,0.0063674089
Parental 05,Parental 07,0.00624117
Parental 09,Parental 13,0.005527955
Parental 10,Parental 19,0.0055111486
Parental 04,Parental 19,0.0055037925
Parental 10,Parental 12,0.0054729425
Parental 05,Parental 16,0.0050151741
Parental 05,Parental 09,0.0048141286
Parental 01,Parental 20,0.0040794111
Parental 04,Parental 10,0.0040748511
Parental 05,Parental 19,0.0037029054
Parental 16,Parental 19,0.0035545129")

【讨论】:

  • 差不多就是这样,但我必须根据对比度值保持最佳组合
猜你喜欢
  • 2013-05-11
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多