данные реструктуризации на основе соответствия условий столбца и года - PullRequest
1 голос
/ 20 февраля 2020

У меня есть некоторые данные, которые выглядят так:

# A tibble: 200 x 10
   status LastYear Var_1_LastYear Var_1_LastYear_… Var_1_LastYear_… Var_1_LastYear_…
    <int>    <int>          <int>            <int>            <int>            <int>
 1      0     2016         410161           356697           326280           352698
 2      0     2015         286384           452049           644232          1090170
 3      0     2016         112513            97947           100756            65112
 4      0     2013          63577            56222            29615            30678

Я пытаюсь организовать их в длинный формат, но с некоторыми дополнительными условиями.

Столбец LastYear является наиболее последние данные у меня есть в наборе данных. Этот столбец совпадает со столбцом Var_1_LastYear, поэтому в строке 1 для 2016 года данные для Var_1_LastYear равны 410161, тогда данные для этого наблюдения за 2015 год - это данные в столбце Var_1_LastYear_but_1, равном 356697 данные для этого наблюдения за 2014 год находятся в столбце Var_1_LastYear_but_2, который равен 326280, наконец, данные за 2013 год для этого наблюдения находятся в Var_1_LastYear_but_3, и это все данные, которые у меня есть по этому наблюдению.

То же самое относится и к строке 4 в данных за 2013 год. Самые последние данные, которые у меня есть, это 2013 год, они расположены в Var_1_LastYear 63577, данные за 2012 год - в Var_1_LastYear_but_1, данные за 2011 год - Var_1_LastYear_but_2 и, наконец, данные за 2010 год: Var_1_LastYear_but_3.

Каждая строка является уникальным наблюдением в данных.

Я хочу структурировать данные так, чтобы годы совпали с правильными столбцами.

Данные:

data <- structure(list(status = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    LastYear = c(2016L, 2016L, 2016L, 2015L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2016L, 2014L, 2015L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2013L, 2015L, 2016L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2014L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2013L, 2013L, 2016L, 2015L, 2016L, 2015L, 2016L, 
    2016L, 2016L, 2016L, 2014L, 2016L, 2016L, 2015L, 2016L, 2016L, 
    2013L, 2016L, 2016L, 2016L, 2015L, 2016L, 2016L, 2016L, 2016L, 
    2015L, 2015L, 2015L, 2014L, 2014L, 2013L, 2016L, 2016L, 2014L, 
    2016L, 2016L, 2016L, 2016L, 2015L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2015L, 2016L, 2016L, 2016L, 2016L, 
    2015L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2015L, 2016L, 2016L, 2016L, 2015L, 2016L, 2014L, 
    2015L, 2016L, 2016L, 2014L, 2016L, 2015L, 2016L, 2015L, 2016L, 
    2016L, 2013L, 2015L, 2016L, 2016L, 2016L, 2016L, 2015L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2015L, 2016L, 2016L, 2013L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2015L, 
    2013L, 2014L, 2015L, 2016L, 2015L, 2016L, 2013L, 2016L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2015L, 2016L, 2016L, 2014L, 2016L, 
    2016L, 2016L, 2015L, 2015L, 2015L, 2016L, 2016L, 2016L, 2014L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2014L, 2016L, 2015L, 2016L, 2016L, 2015L, 2016L, 2015L, 2015L, 
    2016L, 2015L, 2013L, 2015L, 2015L, 2016L, 2016L, 2015L, 2016L, 
    2016L, 2016L, 2016L, 2016L), Var_1_LastYear = c(199257L, 
    301210L, 170900L, 2239772L, 52910L, 953789L, 67052L, 267943L, 
    461103L, 8456077L, 208388L, 406534L, 317003L, 4379428L, 243391L, 
    16892427L, 416119L, 319789L, 85996L, 270020L, 55331L, 70543L, 
    35698L, 139125L, 61551L, 244786L, 77387L, 617342L, 186215L, 
    126518L, 42840L, 723980L, 317351L, 112513L, 563607L, 307839L, 
    71254L, 1416394L, 205934L, 286384L, 27757L, 2854697L, 410161L, 
    58574L, 8369054L, 48553L, 159829L, 13826974L, 119123L, 427598L, 
    917315L, 1062584L, 68595L, 521085L, 31336L, 36785L, 133582L, 
    221685L, 49721L, 771010L, 26293L, 462787L, 159521L, 66911L, 
    4941803L, 159410L, 557002L, 11688545L, 1637426L, 10315734L, 
    1149211L, 558498L, 122581L, 2437304L, 298769L, 1411080L, 
    163325L, 782719L, 286461L, 590687L, 1037064L, 1078523L, 48064L, 
    1367594L, 11860680L, 638107L, 514337L, 438645L, 1500607L, 
    43157L, 385815L, 46662L, 54966L, 771953L, 705613L, 1306056L, 
    1499402L, 225737L, 2890535L, 1395717L, 77690L, 381913L, 433165L, 
    16789988L, 170126L, 113108L, 94165L, 402913L, 121485L, 33308L, 
    65202L, 508432L, 599898L, 528011L, 1205410L, 1722197L, 63577L, 
    526347L, 1267673L, 143947L, 185402L, 433910L, 222679L, 42464L, 
    56606L, 126645L, 103834L, 517620L, 389908L, 249135L, 99257L, 
    3107395L, 204033L, 2223711L, 848002L, 324405L, 42884L, 34501L, 
    885989L, 81108L, 428102L, 120099L, 1366935L, 63683L, 1098268L, 
    284951L, 73020L, 262421L, 80642L, 3871102L, 3103860L, 55295L, 
    103391L, 54979L, 76878L, 77682L, 865256L, 195667L, 55260L, 
    1531978L, 52022L, 381324L, 172470L, 1334880L, 217369L, 221978L, 
    805525L, 2921348L, 661650L, 1752117L, 170261L, 7045756L, 
    30098L, 963802L, 847141L, 200031L, 575447L, 4959868L, 28020L, 
    3879228L, 469158L, 2199150L, 3477661L, 100622L, 7621237L, 
    2955868L, 58467L, 220618L, 1005937L, 464702L, 7768360L, 37100L, 
    124077L, 132463L, 1459294L, 31676L, 854780L, 62208L, 109772L, 
    8121963L), Var_1_LastYear_but_1 = c(211087L, 317156L, 196438L, 
    2724029L, 182671L, 895412L, NA, 208708L, 445366L, 9097717L, 
    185920L, 443193L, 262895L, 4216913L, 248345L, 15909158L, 
    423692L, 627790L, 110242L, 316563L, 48692L, 69201L, 16867L, 
    135680L, 57609L, 243398L, 49985L, NA, 214015L, 70284L, 472116L, 
    794404L, 297404L, 97947L, 388316L, NA, NA, 1430720L, 119737L, 
    452049L, 34663L, 2384518L, 356697L, 62240L, 8420230L, 42650L, 
    3000L, 11645279L, 125727L, 418228L, 928146L, 1060722L, 66400L, 
    349173L, 23321L, 38516L, 137455L, 100945L, 34328L, 688301L, 
    31080L, 425577L, 174960L, 68900L, 4666608L, 154915L, 633215L, 
    12295182L, 1152700L, 11336396L, 1164880L, 535447L, 67738L, 
    1908535L, NA, 1193756L, 174725L, 747794L, 211082L, 518026L, 
    1016343L, 968785L, 48422L, 1631038L, 16794137L, 676570L, 
    364069L, 357901L, 1471924L, 41694L, 352001L, 46664L, 42000L, 
    NA, 878970L, 1337205L, 1062705L, 236650L, 2914499L, 1261530L, 
    258249L, 345978L, 378896L, 18282153L, 163564L, 137695L, 94309L, 
    434244L, 3000L, 67813L, 78429L, 149478L, 905368L, 630653L, 
    1285011L, 1818847L, 56222L, 531539L, 1204754L, 146776L, 131956L, 
    536344L, 337611L, 170439L, 38087L, 124170L, 101035L, 268465L, 
    389908L, 298218L, 101496L, 22143496L, 222316L, 2666536L, 
    885633L, 520221L, 46227L, 32651L, 838993L, 82239L, 433475L, 
    814L, 2093817L, 51975L, 1130301L, 308679L, 73020L, 294416L, 
    94070L, 3187237L, 3193600L, 58912L, 108025L, NA, 27195L, 
    74981L, 707043L, 200562L, 98870L, 1335141L, 79137L, 432448L, 
    164301L, 1262004L, 203458L, NA, 755577L, 1542414L, 469671L, 
    1558813L, 104902L, 6927942L, 33859L, 814309L, 850912L, 178851L, 
    633667L, 4682055L, NA, 3753631L, 3100L, 2129230L, 3511106L, 
    85566L, 4326128L, 3290101L, NA, 183701L, 1068508L, 452242L, 
    7876556L, 57917L, 195715L, 132810L, 1449845L, 28613L, 658685L, 
    93363L, 98689L, 8122549L), Var_1_LastYear_but_2 = c(198939L, 
    310412L, 216471L, 180511L, 98335L, 804071L, NA, 197319L, 
    431614L, 9333272L, NA, 440676L, 251069L, 4140545L, 258777L, 
    14901779L, 236142L, 878651L, 105532L, 411366L, 45075L, 56258L, 
    NA, 152836L, 52971L, 222274L, 34686L, NA, 204642L, 59504L, 
    543096L, 675344L, 318440L, 100756L, 320164L, NA, NA, 1459473L, 
    69352L, 644232L, 40221L, 2416042L, 326280L, NA, 4940784L, 
    41578L, NA, 10684773L, 155485L, 542699L, 914252L, 1239645L, 
    66417L, 115228L, NA, 30493L, 148389L, 75821L, 22638L, 675043L, 
    29703L, 165362L, 165156L, 104908L, 3612454L, 96359L, 717843L, 
    12310693L, 1049113L, 12364506L, 1063303L, 565873L, 80678L, 
    1535509L, NA, 939357L, 166241L, 748607L, 96392L, 383708L, 
    1256475L, 823791L, 40511L, 1779818L, 18557147L, 713896L, 
    336811L, 337781L, 1383211L, 38726L, 391802L, 99332L, NA, 
    NA, 1081890L, 1401853L, 1106101L, 168082L, 2979207L, 876554L, 
    245802L, 312388L, 341693L, 19068937L, 160643L, 158033L, 94808L, 
    NA, NA, 149114L, 68892L, NA, NA, 490798L, 1298992L, 1690013L, 
    29615L, 554397L, 1183978L, 100472L, 3005L, 528728L, 226825L, 
    22611L, 118253L, 109319L, 102298L, 266590L, 389908L, 329276L, 
    97398L, 16634946L, 116214L, 1990332L, 863484L, 765124L, 51019L, 
    29700L, 719787L, 44989L, 374710L, 1178L, 2211102L, 115620L, 
    1145265L, 302550L, 73020L, 285094L, 104497L, 3057043L, 3145602L, 
    87951L, 112181L, NA, 18141L, 70805L, 658336L, 115908L, 97652L, 
    1319692L, 72702L, 467805L, 162343L, 1393888L, NA, NA, 710956L, 
    1536328L, 353983L, 1563529L, 90936L, 6833348L, 117571L, 830328L, 
    844702L, 183553L, 648204L, 4567672L, NA, 3688229L, NA, 2132990L, 
    3546924L, 43652L, 2040732L, 3735372L, NA, 176666L, 1115924L, 
    388868L, 7548700L, 160260L, 196646L, 134385L, 1603156L, 23451L, 
    792151L, 43510L, 71248L, 8122691L), Var_1_LastYear_but_3 = c(189440L, 
    356483L, 236108L, 470191L, 71903L, 1060099L, NA, 126850L, 
    371714L, 8754070L, NA, 375667L, 247230L, 4014510L, 267019L, 
    12451191L, 202228L, 1774761L, 91724L, 367312L, 39855L, 40185L, 
    NA, 123030L, 58147L, 207968L, NA, NA, 201076L, NA, 520240L, 
    839859L, 610033L, 65112L, NA, NA, NA, 1440484L, 42381L, 1090170L, 
    24459L, 2356778L, 352698L, NA, 5193031L, 46551L, NA, 9276946L, 
    165252L, 523792L, 920436L, 1280899L, 73835L, 36158L, NA, 
    17214L, 139789L, 64258L, 30287L, 612223L, 28987L, 104377L, 
    176904L, 81415L, 3405983L, 163800L, 867292L, 11108846L, 1499367L, 
    12802758L, 1081600L, 499539L, 105082L, 1913615L, NA, 569541L, 
    178553L, 793745L, 325610L, NA, 1364817L, 764961L, 37733L, 
    1977591L, 29661637L, 744053L, 234814L, 272723L, 1156259L, 
    40597L, 345588L, 127077L, NA, NA, 1581767L, 1497332L, 978981L, 
    1849L, 3149148L, 913866L, 238679L, 325297L, 327323L, NA, 
    175950L, 161687L, 294834L, NA, NA, 226188L, 43863L, NA, NA, 
    630984L, 1362443L, 1719703L, 30678L, 650570L, 919316L, 114914L, 
    NA, 477524L, 220807L, NA, 129904L, 102754L, 102809L, 249521L, 
    389908L, 249519L, 98512L, 9920877L, 77684L, 1853507L, 861956L, 
    966070L, 47428L, 35393L, 647899L, 45113L, 349630L, 1290L, 
    2527773L, 142131L, 1154903L, 357104L, 73020L, 293766L, 96540L, 
    3283709L, 3162046L, 54776L, 117010L, NA, NA, 79690L, 631184L, 
    101125L, 100118L, 1286678L, 89823L, 426553L, 860L, 1099116L, 
    NA, NA, 680844L, 1524862L, 265850L, 1660273L, 129240L, 7307019L, 
    62900L, 721437L, 839573L, 202847L, 639819L, 4555511L, NA, 
    3762434L, NA, 2027136L, 4520073L, 46824L, 2026769L, 3310178L, 
    NA, NA, 1123716L, 356413L, 7135340L, 151674L, 295405L, NA, 
    1703376L, 18354L, 827198L, 69649L, 38651L, 8122079L), Var_2_LastYear = c(49646L, 
    128433L, 9865L, 67318L, -79144L, 448904L, 3000L, 173186L, 
    385545L, 430198L, -108783L, 109720L, 32716L, 1276693L, 104658L, 
    12290151L, 43244L, 37196L, -14816L, 143850L, -21564L, 10050L, 
    -7102L, -35772L, 50741L, 115876L, 35416L, 9342L, 118473L, 
    13508L, -377548L, -31704L, 97534L, 67185L, 19403L, -134569L, 
    1254L, 985856L, 23700L, 265418L, -67457L, 912184L, 2295L, 
    -11570L, 3277340L, -9250L, 4593L, 4784553L, -31076L, 92667L, 
    113356L, -47770L, 47103L, 306303L, 2950L, 17114L, -3057L, 
    -3628L, 35341L, 739782L, 23699L, -21296L, -31412L, -17596L, 
    163170L, 57668L, -187349L, 4604485L, 286093L, 4380082L, 715947L, 
    440036L, 8052L, 888755L, 5134L, -142197L, 47996L, 781690L, 
    93575L, 380374L, 572574L, 564355L, 47941L, 642593L, 7432691L, 
    203696L, 341478L, 272314L, 962008L, 23525L, 156283L, -210976L, 
    46667L, 431407L, 269826L, 1159844L, 691914L, -515780L, -156117L, 
    280504L, -80700L, -50035L, 151352L, 12686708L, 81145L, 103031L, 
    71997L, 141768L, 48587L, 33308L, 32785L, -83341L, 387280L, 
    153305L, 1092158L, 1151317L, -24286L, 37749L, 404024L, 65597L, 
    41130L, 330090L, 64399L, -20704L, 4649L, 1536L, -5125L, 23733L, 
    176322L, 178525L, 22901L, 329402L, 123543L, 651761L, 654218L, 
    170449L, -13418L, 12935L, 578437L, -3907L, 53006L, 84394L, 
    193843L, -63106L, 387456L, 191425L, 56520L, 74978L, 2949L, 
    1614682L, 3068099L, -31043L, 41523L, -380L, 5981L, -51001L, 
    469377L, -335128L, -15710L, 1361539L, 31458L, 150582L, 15747L, 
    940690L, 30267L, 50246L, 218948L, 1523363L, 195883L, 950678L, 
    124491L, 389884L, 7413L, 699554L, 611315L, 62183L, 565239L, 
    4408778L, -2498L, 3424425L, -15167L, 1776826L, 2173977L, 
    7714L, 1303927L, 511051L, 9872L, 116048L, 271848L, 122751L, 
    5582408L, -70993L, -29643L, 128152L, 913716L, 26204L, 442360L, 
    4979L, -12781L, 3145222L), Var_2_LastYear_but_1 = c(45648L, 
    156133L, 33365L, 66813L, -183861L, 331702L, NA, 146753L, 
    398854L, 405303L, -74987L, 97180L, 9101L, 1078235L, 82939L, 
    10137230L, 44251L, 67558L, -3566L, 154033L, -21746L, -160L, 
    3619L, -14615L, 43178L, 112398L, 26322L, NA, 113383L, 11221L, 
    -217277L, -48388L, 94694L, 66716L, 12140L, NA, NA, 997325L, 
    20194L, 403241L, -24236L, 889393L, 222L, -1607L, 3319046L, 
    -20422L, 3000L, 4821359L, -32426L, 80839L, 144138L, -56121L, 
    47711L, 317529L, 2811L, 11409L, -3821L, -4028L, 20345L, 670288L, 
    7881L, -30545L, -34797L, 5536L, 186201L, 46015L, -155108L, 
    4432967L, 334588L, 4733758L, 697193L, 446852L, 5339L, 625498L, 
    NA, -78394L, 52055L, 747794L, 85540L, 305429L, 554324L, 470236L, 
    48299L, 1029952L, 8406421L, 194121L, 264060L, 80562L, 924821L, 
    23464L, 154136L, -220679L, 42000L, NA, 253206L, 1181118L, 
    552336L, -425948L, -137678L, 230640L, -4762L, -59113L, 144068L, 
    13522161L, 77068L, 104438L, 72078L, 160011L, 3000L, 66392L, 
    31631L, -43961L, 605703L, 247496L, 1086241L, 1010364L, -24447L, 
    98386L, 404028L, 51365L, 20331L, 380118L, 76171L, 15584L, 
    5121L, 1791L, -17591L, -207352L, 176322L, 173395L, 22222L, 
    79208L, 111782L, 605989L, 684252L, 237846L, -4881L, 11840L, 
    524639L, -3067L, 49197L, -1726L, 181583L, -92496L, 405019L, 
    197510L, 56520L, 103544L, 2399L, 1506043L, 3078618L, -29239L, 
    40015L, NA, -7590L, -31940L, 406129L, -256601L, 32538L, 1221181L, 
    49559L, 293726L, 14351L, 880716L, 16333L, NA, 181027L, 1523363L, 
    185618L, 871356L, 59251L, 320291L, 7556L, 695549L, 614428L, 
    52392L, 628198L, 4269860L, NA, 3319670L, 3100L, 1737952L, 
    2202070L, -1365L, 926675L, 711371L, NA, 113784L, 328476L, 
    47430L, 5573294L, -46194L, -47188L, 124740L, 1003347L, 23848L, 
    461043L, 2674L, -3393L, 3145838L), Var_2_LastYear_but_2 = c(44890L, 
    172580L, 24924L, 75188L, -227111L, 282569L, NA, 93163L, 396835L, 
    791506L, NA, 85990L, -7451L, 1054404L, -79750L, 10515140L, 
    40249L, 96821L, 7104L, 220060L, -17231L, -3474L, NA, 4912L, 
    41868L, 62691L, 3852L, NA, 109940L, 6783L, -199238L, -100474L, 
    94283L, 66515L, 122L, NA, NA, 1005490L, 8106L, 546470L, -6590L, 
    871118L, 3535L, NA, 3711842L, -24510L, NA, 4340533L, -7978L, 
    87012L, 144416L, -60904L, 49598L, 106541L, NA, 8691L, -233L, 
    -4664L, 14813L, 647803L, 6323L, -48178L, -27191L, 3992L, 
    210169L, 28737L, -104907L, 4157279L, 320791L, 4842772L, 668432L, 
    472300L, 3489L, 535942L, NA, -145130L, 51646L, 747760L, 33724L, 
    285500L, 488586L, 384804L, 10714L, 1355881L, 62003L, 178490L, 
    245211L, 75354L, 813224L, 23513L, 150761L, -165854L, NA, 
    NA, 360161L, 1274505L, 593487L, -332120L, -15798L, -137985L, 
    35210L, -57334L, 141486L, 13660005L, 74220L, 103780L, 72545L, 
    NA, NA, 132512L, 13326L, NA, NA, 213980L, 1090801L, 885777L, 
    -28352L, 103021L, 154423L, 23772L, 3005L, 430368L, 69265L, 
    14835L, 75334L, 2136L, -14032L, -228632L, 176322L, 146620L, 
    13331L, 71855L, 79016L, 564273L, 673481L, 207784L, -5008L, 
    9230L, 454197L, 17176L, 46277L, -35609L, 430928L, -46740L, 
    413999L, 193942L, 56520L, 103486L, 2051L, 1438119L, 3061827L, 
    -32672L, 39104L, NA, 3579L, -16713L, 389473L, -253558L, 40662L, 
    1222272L, 47294L, 218917L, 13552L, 838724L, NA, NA, 168592L, 
    1523845L, 169364L, 793303L, 50339L, 276138L, 8486L, 683470L, 
    608330L, 53204L, 643103L, 4211806L, NA, 3205295L, NA, 1631983L, 
    2188790L, 1922L, 390013L, 564932L, NA, 108697L, 338917L, 
    83823L, 5557917L, 39344L, -50592L, 121330L, 1136722L, 19168L, 
    463508L, -42308L, 9235L, 3146312L), Var_2_LastYear_but_3 = c(44564L, 
    165347L, 16001L, 44878L, -89668L, 350719L, NA, 57283L, 286586L, 
    515336L, NA, 78219L, -22066L, 1072074L, -56310L, 9967100L, 
    36781L, 118878L, 5221L, 177792L, -18858L, -5352L, NA, 3387L, 
    -4776L, 59587L, NA, NA, 106186L, NA, -183684L, -11036L, 391935L, 
    33360L, NA, NA, NA, 1009992L, 5973L, 503047L, -10607L, 848134L, 
    2877L, NA, 4371942L, -27543L, NA, 4503522L, -19411L, 103081L, 
    172825L, 3378L, 45190L, 5702L, NA, 6576L, 3844L, -3550L, 
    13727L, 597423L, 5272L, -50490L, -14111L, 1615L, 248531L, 
    32215L, -15384L, 3943388L, 291299L, 4794914L, 649755L, 410680L, 
    1953L, 437106L, NA, -378817L, 50984L, 792667L, 136849L, NA, 
    423414L, 346300L, 5275L, 1758743L, -481552L, 164183L, 137740L, 
    51846L, 645266L, 24459L, 146437L, -162076L, NA, NA, 467848L, 
    1364565L, 582905L, -313615L, 408723L, -86206L, 108227L, -45731L, 
    139706L, NA, 73831L, 110152L, 84709L, NA, NA, 127276L, -11452L, 
    NA, NA, 235620L, 1039951L, 717239L, -17008L, 101981L, 79327L, 
    42473L, NA, 371713L, 67008L, NA, 97570L, 2570L, -4354L, -257425L, 
    176322L, 117792L, 11268L, 64475L, 36503L, 525353L, 666825L, 
    235894L, -5180L, 9689L, 369367L, 16572L, 43892L, -35609L, 
    389306L, 15957L, 436397L, 235494L, 56520L, 97448L, 1712L, 
    1364555L, 3063415L, -57488L, 37541L, NA, NA, 14364L, 375278L, 
    -255212L, 42172L, 1179363L, 75535L, 226539L, 860L, 665703L, 
    NA, NA, 164817L, 1517672L, 144825L, 871473L, 65822L, 235132L, 
    6787L, 677731L, 603364L, 113402L, 635736L, 4184338L, NA, 
    3154865L, NA, 1518754L, 2192465L, 10492L, 451723L, 325724L, 
    NA, NA, 321792L, 131421L, 5526775L, 50613L, -47657L, NA, 
    1149931L, 14193L, 466855L, -16235L, 7652L, 3152323L)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -200L))

1 Ответ

2 голосов
/ 20 февраля 2020

Решение с использованием dplyr и tidyr:

library(dplyr)
library(tidyr)
df %>% 
  pivot_longer(cols = -c(status, LastYear),
               names_to = "TimeDiff",
               names_prefix = "Var_\\d_LastYear(_but_)*") %>% 
  mutate(year = LastYear - as.numeric(TimeDiff),
         year = ifelse(is.na(year), LastYear, year)) %>% 
  select(status, year, value)

Возвращает:

 # A tibble: 800 x 3
    status  year  value
     <int> <dbl>  <int>
 1      0  2016  49646
 2      0  2015  45648
 3      0  2014  44890
 4      0  2013  44564
 5      0  2016 128433
 6      0  2015 156133
 7      0  2014 172580
 8      0  2013 165347
 9      0  2016   9865
10      0  2015  33365

Объяснение:

Сначала мы приведем данные (кроме столбцов status и LastYear в длинную форму и удалите все символы, кроме цифр, обозначающих «разницу во времени с LastYear».

Затем мы вычтем TimeDiff из LastYear, чтобы получить год, к которому относится значение Но будут некоторые значения NA из строк, где TimeDiff равно "". Мы заменим их значением из LastYear.

Наконец мы выбираем столбцы, в которых мы хотим сохранить правильный порядок.

Редактировать:

Решение, которое также учитывает несколько переменных в именах столбцов:

library(dplyr)
library(tidyr)
df %>% 
  pivot_longer(cols = -c(status, LastYear),
               names_to = c("Var", "TimeDiff"),
               names_pattern = "(Var_\\d)_LastYear(.*)") %>% 
  mutate(TimeDiff = gsub("[^0-9]", "", TimeDiff)) %>% 
  mutate(year = LastYear - as.numeric(TimeDiff),
         year = ifelse(is.na(year), LastYear, year)) %>% 
  select(status, year, value)

Возвращает:

 # A tibble: 1,600 x 4
   status  year Var    value
    <int> <dbl> <chr>  <int>
 1      0  2016 Var_1 199257
 2      0  2015 Var_1 211087
 3      0  2014 Var_1 198939
 4      0  2013 Var_1 189440
 5      0  2016 Var_2  49646
 6      0  2015 Var_2  45648
 7      0  2014 Var_2  44890
 8      0  2013 Var_2  44564
 9      0  2016 Var_1 301210
10      0  2015 Var_1 317156
# … with 1,590 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...