【发布时间】:2021-07-13 11:51:48
【问题描述】:
我很难弄清楚这一点,我会尽力解释我在哪里需要帮助。
我有一个数据框,其中包含参与者 ID(第 1 列)、该参与者的可能约会日期(第 2 列,范围从 V1 到 V3,表示每个参与者最多有三个可能的日期),日期(第 3 列)和带有值的列(第 4 列)。 对于每位参与者,我们希望为他们找到一个约会日期。第 2 列 (vis) 表示日期的偏好(V1 最高偏好,如果不可能则 V2,如果不可能则 V3,如果不可能则 NO DATE)。获取每个日期的可能性取决于第 4 列中的值。如果此列等于 60,则无法添加此日期的更多约会。每次预约都计入 2 以添加到此值。因此,例如,如果日期 2021-09-07 的值已为 60,则无法添加更多约会。但是如果日期 2021-08-25 的值只有 44,那么这个日期最多仍然可以进行 8 次约会。
例子:
# A tibble: 9 x 4
Included.y vis date ficol
<dbl> <chr> <date> <chr>
1 316 V1 2021-07-01 NA
2 1027 V1 2021-07-01 NA
3 1101 V1 2021-07-01 NA
4 73 V1 2021-07-07 24
5 479 V1 2021-07-07 24
6 1026 V1 2021-07-07 24
7 1186 V1 2021-07-07 24
8 13 V2 2021-07-07 24
9 139 V2 2021-07-07 24
会变成:
# A tibble: 9 x 4
Included.y vis date ficol
<dbl> <chr> <date> <dbl>
1 316 V1 2021-07-01 6
2 1027 V1 2021-07-01 6
3 1101 V1 2021-07-01 6
4 73 V1 2021-07-07 36
5 479 V1 2021-07-07 36
6 1026 V1 2021-07-07 36
7 1186 V1 2021-07-07 36
8 13 V2 2021-07-07 36
9 139 V2 2021-07-07 36
由于包含 2021-07-01 的值的列曾经是 NA(意思是 0),而现在在该日期进行了 3 次约会,因此总值变为 6(我们只对总值感兴趣,因为这将是限制(最多 60 个))。对于 2021-07-07,该值从 24 开始,在该日期进行 6 次新任命后,该值将是 36。 在此示例中,一切正常,可以安排约会,但也可能 2021-07-02 的值已经是 58。
# A tibble: 1 x 4
Included.y vis date ficol
<dbl> <chr> <date> <dbl>
1 317 V1 2021-07-02 58
这将变成:
# A tibble: 1 x 4
Included.y vis date ficol
<dbl> <chr> <date> <dbl>
1 317 V1 2021-07-02 60
现在 2021-07-02 日期已“满”,因此无法在此日期进行更多约会。
我真的希望我尽可能清楚地说明这一点。否则请告诉我。我真的希望你能帮忙!
我把实际数据集的前 100 行的 dput 放在这里:
structure(list(Included.y = c(1L, 1L, 3L, 3L, 4L, 4L, 4L, 5L,
5L, 6L, 6L, 6L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 12L, 12L, 13L, 13L,
13L, 14L, 14L, 15L, 15L, 17L, 17L, 20L, 20L, 21L, 21L, 22L, 22L,
22L, 23L, 23L, 25L, 25L, 27L, 27L, 28L, 28L, 28L, 30L, 31L, 31L,
32L, 32L, 33L, 33L, 35L, 35L, 35L, 37L, 37L, 37L, 39L, 39L, 41L,
42L, 42L, 44L, 44L, 45L, 45L, 45L, 46L, 46L, 46L, 47L, 47L, 48L,
48L, 49L, 49L, 51L, 51L, 54L, 54L, 55L, 55L, 55L, 56L, 57L, 57L,
59L, 59L, 60L, 60L, 60L, 62L, 62L, 63L, 63L, 64L, 64L, 68L),
vis = c("V1", "V3", "V1", "V3", "V1", "V2", "V3", "V1", "V3",
"V1", "V2", "V3", "V1", "V3", "V1", "V2", "V3", "V1", "V2",
"V1", "V3", "V1", "V2", "V3", "V1", "V3", "V1", "V3", "V1",
"V3", "V1", "V2", "V1", "V2", "V1", "V2", "V3", "V1", "V3",
"V1", "V2", "V1", "V2", "V1", "V2", "V3", "V2", "V1", "V3",
"V1", "V2", "V1", "V3", "V1", "V2", "V3", "V1", "V2", "V3",
"V1", "V2", "V2", "V1", "V2", "V1", "V2", "V1", "V2", "V3",
"V1", "V2", "V3", "V1", "V3", "V1", "V3", "V1", "V3", "V1",
"V3", "V1", "V3", "V1", "V2", "V3", "V2", "V1", "V3", "V1",
"V2", "V1", "V2", "V3", "V1", "V2", "V1", "V2", "V1", "V2",
"V1"), date = structure(c(18865, 18864, 18928, 18927, 18919,
18920, 18918, 18942, 18941, 18878, 18879, 18877, 18963, 18962,
18857, 18858, 18856, 18897, 18898, 18970, 18969, 18814, 18815,
18813, 18942, 18941, 18921, 18920, 18851, 18850, 18911, 18912,
18911, 18912, 18822, 18823, 18821, 18865, 18864, 18953, 18954,
18813, 18814, 18962, 18963, 18961, 18869, 18830, 18829, 18827,
18828, 18935, 18934, 18954, 18955, 18953, 18955, 18956, 18954,
18862, 18863, 18904, 18911, 18912, 18911, 18912, 18822, 18823,
18821, 18926, 18927, 18925, 18844, 18843, 18914, 18913, 18984,
18983, 18956, 18955, 18949, 18948, 18878, 18879, 18877, 18813,
18991, 18990, 18967, 18968, 18857, 18858, 18856, 18967, 18968,
18869, 18870, 18918, 18919, 18954), class = "Date"), ficol = c(NA,
"44", " 4", "60", "20", NA, "60", NA, NA, "20", NA, "60",
NA, "52", NA, NA, "36", "60", "60", NA, NA, "60", "24", "60",
NA, NA, NA, NA, NA, "16", "56", "16", "56", "16", "16", NA,
"60", NA, "44", "60", "60", "60", "60", "52", NA, "60", "60",
NA, NA, "60", "32", NA, "56", "60", NA, "60", NA, NA, "60",
"60", "60", "60", "56", "16", "56", "16", "16", NA, "60",
"60", "60", "60", NA, "16", NA, NA, NA, NA, NA, NA, NA, "44",
"20", NA, "60", "60", NA, NA, "60", "40", NA, NA, "36", "60",
"40", "60", "60", "60", "20", "60")), row.names = c(NA, -100L
), class = c("tbl_df", "tbl", "data.frame"), na.action = structure(c(`2` = 2L,
`5` = 5L, `11` = 11L, `17` = 17L, `24` = 24L, `26` = 26L, `32` = 32L,
`35` = 35L, `38` = 38L, `42` = 42L, `45` = 45L, `50` = 50L, `54` = 54L,
`57` = 57L, `61` = 61L, `63` = 63L, `65` = 65L, `69` = 69L, `71` = 71L,
`81` = 81L, `82` = 82L, `84` = 84L, `87` = 87L, `90` = 90L, `98` = 98L,
`101` = 101L, `104` = 104L, `107` = 107L, `110` = 110L, `115` = 115L,
`117` = 117L, `119` = 119L, `123` = 123L, `129` = 129L, `132` = 132L,
`135` = 135L, `150` = 150L, `155` = 155L, `159` = 159L, `161` = 161L,
`163` = 163L, `165` = 165L, `167` = 167L, `171` = 171L, `173` = 173L,
`178` = 178L, `180` = 180L, `186` = 186L, `199` = 199L, `201` = 201L,
`207` = 207L, `209` = 209L, `219` = 219L, `223` = 223L, `225` = 225L,
`228` = 228L, `231` = 231L, `233` = 233L, `238` = 238L, `240` = 240L,
`243` = 243L, `249` = 249L, `251` = 251L, `255` = 255L, `258` = 258L,
`261` = 261L, `265` = 265L, `267` = 267L, `270` = 270L, `273` = 273L,
`277` = 277L, `279` = 279L, `287` = 287L, `299` = 299L, `302` = 302L,
`306` = 306L, `327` = 327L, `328` = 328L, `330` = 330L, `334` = 334L,
`336` = 336L, `337` = 337L, `339` = 339L, `348` = 348L, `349` = 349L,
`351` = 351L, `355` = 355L, `357` = 357L, `359` = 359L, `362` = 362L,
`366` = 366L, `369` = 369L, `372` = 372L, `377` = 377L, `381` = 381L,
`382` = 382L, `384` = 384L, `387` = 387L, `390` = 390L, `397` = 397L,
`399` = 399L, `402` = 402L, `405` = 405L, `407` = 407L, `411` = 411L,
`414` = 414L, `420` = 420L, `429` = 429L, `444` = 444L, `450` = 450L,
`451` = 451L, `453` = 453L, `456` = 456L, `458` = 458L, `466` = 466L,
`468` = 468L, `472` = 472L, `474` = 474L, `483` = 483L, `487` = 487L,
`489` = 489L, `492` = 492L, `493` = 493L, `495` = 495L, `498` = 498L,
`499` = 499L, `501` = 501L, `509` = 509L, `514` = 514L, `516` = 516L,
`529` = 529L, `531` = 531L, `532` = 532L, `534` = 534L, `536` = 536L,
`541` = 541L, `543` = 543L, `552` = 552L, `555` = 555L, `563` = 563L,
`568` = 568L, `570` = 570L, `573` = 573L, `575` = 575L, `578` = 578L,
`581` = 581L, `583` = 583L, `585` = 585L, `587` = 587L, `594` = 594L,
`598` = 598L, `600` = 600L, `614` = 614L, `617` = 617L, `619` = 619L,
`621` = 621L, `624` = 624L, `628` = 628L, `630` = 630L, `631` = 631L,
`633` = 633L, `634` = 634L, `636` = 636L, `639` = 639L, `647` = 647L,
`653` = 653L, `656` = 656L, `658` = 658L, `660` = 660L, `665` = 665L,
`668` = 668L, `676` = 676L, `678` = 678L, `681` = 681L, `683` = 683L,
`687` = 687L, `689` = 689L, `693` = 693L, `704` = 704L, `706` = 706L,
`708` = 708L, `713` = 713L, `715` = 715L, `717` = 717L, `720` = 720L,
`723` = 723L, `725` = 725L, `732` = 732L, `733` = 733L, `735` = 735L,
`738` = 738L, `750` = 750L, `753` = 753L, `754` = 754L, `756` = 756L,
`762` = 762L, `771` = 771L, `773` = 773L, `782` = 782L, `784` = 784L,
`786` = 786L, `787` = 787L, `789` = 789L, `793` = 793L, `795` = 795L,
`798` = 798L, `800` = 800L, `816` = 816L, `817` = 817L, `819` = 819L,
`822` = 822L, `833` = 833L, `837` = 837L, `845` = 845L, `848` = 848L,
`851` = 851L, `853` = 853L, `855` = 855L, `861` = 861L, `872` = 872L,
`874` = 874L, `876` = 876L, `882` = 882L, `883` = 883L, `885` = 885L,
`888` = 888L, `889` = 889L, `891` = 891L, `896` = 896L, `900` = 900L,
`913` = 913L, `915` = 915L, `916` = 916L, `918` = 918L, `920` = 920L,
`926` = 926L, `929` = 929L, `951` = 951L, `954` = 954L, `974` = 974L,
`979` = 979L, `981` = 981L, `983` = 983L, `986` = 986L, `988` = 988L,
`990` = 990L, `991` = 991L, `993` = 993L, `996` = 996L, `998` = 998L,
`1002` = 1002L, `1010` = 1010L, `1017` = 1017L, `1021` = 1021L,
`1023` = 1023L, `1027` = 1027L, `1029` = 1029L, `1042` = 1042L,
`1044` = 1044L, `1050` = 1050L, `1054` = 1054L, `1056` = 1056L,
`1058` = 1058L, `1064` = 1064L, `1073` = 1073L, `1077` = 1077L,
`1078` = 1078L, `1080` = 1080L, `1090` = 1090L, `1092` = 1092L,
`1095` = 1095L, `1101` = 1101L, `1116` = 1116L, `1119` = 1119L,
`1122` = 1122L, `1126` = 1126L, `1128` = 1128L, `1132` = 1132L,
`1134` = 1134L, `1138` = 1138L, `1140` = 1140L, `1143` = 1143L,
`1144` = 1144L, `1146` = 1146L, `1158` = 1158L, `1160` = 1160L,
`1164` = 1164L, `1166` = 1166L, `1170` = 1170L, `1172` = 1172L,
`1174` = 1174L, `1176` = 1176L, `1180` = 1180L, `1182` = 1182L,
`1184` = 1184L, `1186` = 1186L, `1188` = 1188L, `1190` = 1190L,
`1201` = 1201L, `1203` = 1203L, `1206` = 1206L, `1212` = 1212L,
`1213` = 1213L, `1215` = 1215L, `1218` = 1218L, `1221` = 1221L,
`1225` = 1225L, `1227` = 1227L, `1233` = 1233L, `1235` = 1235L,
`1241` = 1241L, `1245` = 1245L, `1247` = 1247L, `1251` = 1251L,
`1259` = 1259L, `1262` = 1262L, `1265` = 1265L, `1267` = 1267L,
`1269` = 1269L, `1272` = 1272L, `1275` = 1275L, `1281` = 1281L,
`1286` = 1286L, `1289` = 1289L, `1292` = 1292L, `1301` = 1301L,
`1303` = 1303L, `1305` = 1305L, `1310` = 1310L, `1314` = 1314L,
`1323` = 1323L, `1326` = 1326L, `1342` = 1342L, `1344` = 1344L,
`1347` = 1347L, `1358` = 1358L, `1361` = 1361L, `1366` = 1366L,
`1368` = 1368L, `1370` = 1370L, `1373` = 1373L, `1379` = 1379L,
`1388` = 1388L, `1390` = 1390L, `1392` = 1392L, `1394` = 1394L,
`1396` = 1396L, `1398` = 1398L, `1401` = 1401L, `1403` = 1403L,
`1406` = 1406L, `1411` = 1411L, `1413` = 1413L, `1420` = 1420L,
`1422` = 1422L, `1424` = 1424L, `1427` = 1427L, `1429` = 1429L,
`1431` = 1431L, `1435` = 1435L, `1437` = 1437L, `1439` = 1439L,
`1443` = 1443L, `1449` = 1449L, `1455` = 1455L, `1457` = 1457L,
`1461` = 1461L, `1469` = 1469L, `1471` = 1471L, `1473` = 1473L,
`1478` = 1478L, `1480` = 1480L, `1482` = 1482L, `1483` = 1483L,
`1485` = 1485L, `1487` = 1487L, `1491` = 1491L, `1496` = 1496L,
`1501` = 1501L, `1503` = 1503L, `1506` = 1506L, `1507` = 1507L,
`1509` = 1509L, `1511` = 1511L, `1515` = 1515L, `1521` = 1521L,
`1525` = 1525L, `1527` = 1527L, `1529` = 1529L, `1531` = 1531L,
`1533` = 1533L, `1534` = 1534L, `1536` = 1536L, `1539` = 1539L,
`1556` = 1556L, `1566` = 1566L, `1575` = 1575L, `1578` = 1578L,
`1579` = 1579L, `1581` = 1581L, `1584` = 1584L, `1587` = 1587L,
`1595` = 1595L, `1598` = 1598L, `1604` = 1604L, `1611` = 1611L,
`1615` = 1615L, `1617` = 1617L, `1618` = 1618L, `1620` = 1620L,
`1624` = 1624L, `1626` = 1626L, `1632` = 1632L, `1633` = 1633L,
`1635` = 1635L, `1637` = 1637L, `1640` = 1640L, `1642` = 1642L,
`1644` = 1644L, `1646` = 1646L, `1649` = 1649L, `1653` = 1653L,
`1657` = 1657L, `1659` = 1659L, `1660` = 1660L, `1662` = 1662L,
`1667` = 1667L, `1671` = 1671L, `1673` = 1673L, `1676` = 1676L,
`1678` = 1678L, `1680` = 1680L, `1684` = 1684L, `1686` = 1686L,
`1689` = 1689L, `1698` = 1698L, `1705` = 1705L, `1707` = 1707L,
`1709` = 1709L, `1714` = 1714L, `1716` = 1716L, `1730` = 1730L,
`1732` = 1732L, `1734` = 1734L, `1740` = 1740L, `1742` = 1742L,
`1747` = 1747L, `1749` = 1749L, `1752` = 1752L, `1753` = 1753L,
`1755` = 1755L, `1764` = 1764L, `1769` = 1769L, `1774` = 1774L,
`1776` = 1776L, `1782` = 1782L, `1783` = 1783L, `1785` = 1785L,
`1790` = 1790L, `1792` = 1792L, `1794` = 1794L, `1797` = 1797L,
`1800` = 1800L, `1803` = 1803L, `1806` = 1806L, `1810` = 1810L,
`1812` = 1812L, `1817` = 1817L, `1822` = 1822L, `1824` = 1824L,
`1828` = 1828L, `1830` = 1830L, `1833` = 1833L, `1849` = 1849L,
`1851` = 1851L, `1856` = 1856L, `1859` = 1859L, `1863` = 1863L,
`1866` = 1866L, `1871` = 1871L, `1874` = 1874L, `1878` = 1878L,
`1879` = 1879L, `1881` = 1881L, `1884` = 1884L, `1890` = 1890L,
`1897` = 1897L, `1899` = 1899L, `1902` = 1902L, `1904` = 1904L,
`1907` = 1907L, `1914` = 1914L, `1915` = 1915L, `1917` = 1917L,
`1918` = 1918L, `1920` = 1920L, `1923` = 1923L, `1927` = 1927L,
`1929` = 1929L, `1932` = 1932L, `1935` = 1935L, `1939` = 1939L,
`1941` = 1941L, `1947` = 1947L, `1948` = 1948L, `1950` = 1950L,
`1951` = 1951L, `1953` = 1953L, `1958` = 1958L, `1961` = 1961L,
`1968` = 1968L, `1974` = 1974L, `1975` = 1975L, `1977` = 1977L,
`1979` = 1979L, `1982` = 1982L, `1985` = 1985L, `1988` = 1988L,
`1996` = 1996L, `1998` = 1998L, `1999` = 1999L, `2001` = 2001L,
`2010` = 2010L, `2012` = 2012L, `2020` = 2020L, `2022` = 2022L,
`2026` = 2026L, `2028` = 2028L, `2032` = 2032L, `2034` = 2034L,
`2039` = 2039L, `2044` = 2044L, `2046` = 2046L, `2052` = 2052L,
`2054` = 2054L, `2056` = 2056L, `2058` = 2058L, `2063` = 2063L,
`2066` = 2066L, `2072` = 2072L, `2076` = 2076L, `2079` = 2079L,
`2082` = 2082L, `2084` = 2084L, `2086` = 2086L, `2088` = 2088L,
`2091` = 2091L, `2093` = 2093L, `2097` = 2097L, `2098` = 2098L,
`2100` = 2100L, `2104` = 2104L, `2106` = 2106L, `2107` = 2107L,
`2109` = 2109L, `2111` = 2111L, `2114` = 2114L, `2126` = 2126L,
`2136` = 2136L, `2142` = 2142L, `2144` = 2144L, `2146` = 2146L,
`2148` = 2148L, `2153` = 2153L, `2160` = 2160L, `2162` = 2162L,
`2165` = 2165L, `2170` = 2170L, `2172` = 2172L, `2173` = 2173L,
`2175` = 2175L, `2180` = 2180L, `2182` = 2182L, `2184` = 2184L,
`2186` = 2186L, `2189` = 2189L, `2191` = 2191L, `2193` = 2193L,
`2198` = 2198L, `2200` = 2200L, `2202` = 2202L, `2205` = 2205L,
`2207` = 2207L, `2210` = 2210L, `2212` = 2212L, `2214` = 2214L,
`2215` = 2215L, `2217` = 2217L, `2220` = 2220L, `2221` = 2221L,
`2223` = 2223L, `2225` = 2225L, `2229` = 2229L, `2232` = 2232L,
`2234` = 2234L, `2236` = 2236L, `2238` = 2238L, `2239` = 2239L,
`2241` = 2241L, `2245` = 2245L, `2247` = 2247L, `2249` = 2249L,
`2251` = 2251L, `2253` = 2253L, `2262` = 2262L, `2264` = 2264L,
`2268` = 2268L, `2270` = 2270L, `2274` = 2274L, `2279` = 2279L,
`2288` = 2288L, `2292` = 2292L, `2296` = 2296L, `2298` = 2298L,
`2304` = 2304L, `2308` = 2308L, `2310` = 2310L, `2313` = 2313L,
`2321` = 2321L, `2324` = 2324L, `2327` = 2327L, `2329` = 2329L,
`2331` = 2331L, `2334` = 2334L, `2336` = 2336L, `2339` = 2339L,
`2342` = 2342L, `2344` = 2344L, `2346` = 2346L, `2348` = 2348L,
`2350` = 2350L, `2352` = 2352L, `2353` = 2353L, `2355` = 2355L,
`2358` = 2358L, `2361` = 2361L, `2365` = 2365L, `2367` = 2367L,
`2373` = 2373L, `2375` = 2375L, `2381` = 2381L, `2384` = 2384L,
`2387` = 2387L, `2391` = 2391L, `2393` = 2393L, `2395` = 2395L,
`2397` = 2397L, `2399` = 2399L, `2401` = 2401L, `2403` = 2403L,
`2405` = 2405L, `2410` = 2410L, `2412` = 2412L, `2413` = 2413L,
`2415` = 2415L, `2423` = 2423L, `2425` = 2425L, `2427` = 2427L,
`2429` = 2429L, `2435` = 2435L, `2437` = 2437L, `2439` = 2439L,
`2442` = 2442L, `2444` = 2444L, `2446` = 2446L, `2448` = 2448L,
`2449` = 2449L, `2451` = 2451L, `2455` = 2455L, `2457` = 2457L,
`2462` = 2462L, `2466` = 2466L, `2467` = 2467L, `2469` = 2469L,
`2474` = 2474L, `2479` = 2479L, `2481` = 2481L, `2483` = 2483L,
`2485` = 2485L, `2487` = 2487L, `2496` = 2496L, `2498` = 2498L,
`2500` = 2500L, `2502` = 2502L, `2507` = 2507L, `2509` = 2509L,
`2511` = 2511L, `2514` = 2514L, `2518` = 2518L, `2520` = 2520L,
`2522` = 2522L, `2524` = 2524L, `2526` = 2526L, `2528` = 2528L,
`2530` = 2530L, `2532` = 2532L, `2533` = 2533L, `2535` = 2535L
), class = "omit"))
【问题讨论】:
-
当日期达到 60 时会发生什么?是否以任何方式标记了该日期的后续“请求”?大概他们不能再添加到总数中了?
-
您好 O.A.,当某个日期的值达到 60 时,将无法再向该日期添加任何参与者或添加任何值。如果另一个参与者只有该日期作为选项可用,则该参与者将被丢弃。希望这能回答您的问题?
-
@DebbieOomen 我没有时间提供完整的解决方案。无法再预订 ficol == 60 的日期 (date_full % filter(ficol == 60))。您现在可以检查参与者的所有预订是否都在这些日期。下一步是过滤非全天和高优先级请求,date_v1 % filter(ficol
-
嗨,雷,感谢您的回答。我不太明白如何从 date_full 到下一步,检查参与者的所有预订是否都在这些日期。你能否详细说明一下..提前谢谢!
-
df %>% filter(date == "2021-11-23")一天访问四次,对吗?
标签: r date if-statement conditional-statements