R:改进一组代码的处理时间

问题描述 投票:0回答:1

问题:

如何改进以下代码的处理时间?

目标描述:

我有以下示例数据集,其中每个观察包含 两个人的ID(主要代理人编码为

aid
和合作伙伴 coded
pid
) 在项目 coded 中一起工作的人 作为
oid
在编码为
o3.month.date
.
的月份 我还有伙伴
pid
的角色信息,里面有一个 每个 id 的单一角色。

我的目标是
(1)获取每对

aid
pid
的过去项目的数量 上个月一起工作
o3.month.date.previous
(就在一个月前), 和
(2) 获得
aid
pid
在所有项目中的联合过去经验的平均值,并按当月的特定合作伙伴角色
o3.month.date
.

为了帮助您理解,我在数据集下方附上了当前代码。

示例数据集:

d <- 
      structure(list(aid = c("112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112", "112", "112", "112", "112", 
      "112", "112", "112", "112", "112"), pid = c("216", "287", "567", 
      "734", "783", "393", "514", "898", "908", "177", "273", "454", 
      "514", "783", "896", "32", "292", "353", "543", "682", "761", 
      "349", "360", "362", "432", "483", "561", "349", "360", "362", 
      "432", "123", "287", "307", "425", "454", "734", "782", "262", 
      "317", "330", "481", "506", "734", "908", "121", "300", "393", 
      "514", "701", "716", "849", "908", "196", "318", "367", "428", 
      "578", "666", "146", "285", "297", "353", "402", "675", "770", 
      "827", "895", "212", "265", "285", "318", "393", "683", "800", 
      "393", "514", "716", "821", "196", "301", "313", "360", "841", 
      "335", "400", "852", "897", "123", "178", "294", "393", "514", 
      "586", "716", "821", "32", "292", "334", "353", "682", "761", 
      "10", "150", "289", "509", "510", "513", "546", "682", "128", 
      "367", "393", "461", "514", "716", "742", "36", "330", "359", 
      "402", "481", "715", "869", "393", "514", "898", "908", "135", 
      "154", "159", "314", "452", "465", "524", "546", "560", "792", 
      "829", "879", "35", "301", "321", "338", "509", "553", "682", 
      "774", "151", "246", "343", "360", "385", "570", "908", "146", 
      "249", "275", "447", "560", "852", "321", "510", "701", "857", 
      "19", "174", "292", "301", "335", "421", "513", "682", "804", 
      "349", "360", "362", "432", "561", "205", "270", "338", "416", 
      "483", "553", "663", "769", "915", "223", "335", "421", "442", 
      "786", "891", "133", "294", "305", "346", "400", "483", "541", 
      "593", "658", "661", "681", "689", "857", "871", "192", "334", 
      "393", "871", "899", "174", "311", "343", "454", "543", "771", 
      "400", "517", "658", "857", "335", "358", "441", "648", "879", 
      "135", "182", "282", "288", "302", "314", "435", "585", "687", 
      "769", "786", "273", "333", "380", "483", "581", "715", "751", 
      "321", "510", "701", "857", "282", "585", "769", "786", "282", 
      "585", "769", "786", "287", "560", "567", "578", "842", "146", 
      "285", "297", "353", "402", "770", "827", "895", "301", "335", 
      "859", "915", "151", "288", "301", "335", "541", "859", "158", 
      "301", "313", "335", "483", "687", "859", "915", "321", "510", 
      "585", "857", "879", "216", "302", "416", "557", "762", "786", 
      "215", "240", "553", "585", "593", "746", "843", "879", "121", 
      "222", "302", "338", "416", "509", "601", "607", "663", "799", 
      "159", "171", "321", "509", "510", "601", "602", "753", "832", 
      "187", "287", "543", "567", "578", "842", "321", "510", "857", 
      "859", "188", "334", "454", "701", "716", "178", "334", "454", 
      "798", "813", "307", "528", "529", "568", "577", "653", "287", 
      "454", "734", "782", "304", "393", "502", "523", "815", "302", 
      "483", "585", "687", "849", "302", "585", "687", "769", "123", 
      "301", "335", "385", "682", "869", "304", "393", "523", "815", 
      "304", "393", "471", "815", "454", "509", "514", "783", "852", 
      "302", "416", "601", "607", "663", "799", "33", "275", "288", 
      "304", "393", "471", "523", "653", "167", "170", "321", "322", 
      "365", "441", "601", "808", "859", "338", "509", "601", "663", 
      "799", "122", "240", "314", "335", "442", "701", "808", "177", 
      "188", "244", "273", "335", "435", "553", "585", "682", "289", 
      "510", "546", "748", "287", "454", "734", "782", "196", "213", 
      "294", "308", "422", "687", "865", "204", "337", "471", "800", 
      "826", "887", "287", "454", "734", "782", "19", "321", "335", 
      "393", "441", "546", "548", "585", "786", "849", "878"), p3.role = c("Nurse", 
      "Nurse", "Nurse", "Physician", "Anesthesiologist", "Nurse", "Nurse", 
      "Physician", "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Physician", 
      "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Physician", "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Physician", "Anesthesiologist", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Anesthesiologist", "Nurse", "Nurse", "Physician", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Physician", "Physician", "Nurse", "Physician", "Nurse", "Nurse", 
      "Nurse", "Anesthesiologist", "Anesthesiologist", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Physician", 
      "Anesthesiologist", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Anesthesiologist", "Anesthesiologist", "Nurse", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Physician", "Anesthesiologist", "Nurse", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Anesthesiologist", "Physician", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Physician", "Nurse", 
      "Nurse", "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Physician", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Nurse", "Anesthesiologist", "Physician", "Nurse", "Physician", 
      "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Nurse", "Physician", "Anesthesiologist", "Physician", "Physician", 
      "Anesthesiologist", "Anesthesiologist", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Physician", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Anesthesiologist", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Physician", "Anesthesiologist", "Nurse", "Nurse", 
      "Physician", "Anesthesiologist", "Nurse", "Nurse", "Physician", 
      "Anesthesiologist", "Nurse", "Anesthesiologist", "Nurse", "Nurse", 
      "Physician", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Physician", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Nurse", "Physician", 
      "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Anesthesiologist", "Physician", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Physician", "Anesthesiologist", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Physician", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Physician", 
      "Anesthesiologist", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Physician", 
      "Nurse", "Nurse", "Physician", "Anesthesiologist", "Nurse", "Nurse", 
      "Nurse", "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Nurse", "Physician", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Anesthesiologist", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Nurse", "Anesthesiologist", "Physician", "Nurse", "Nurse", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Physician", "Nurse", "Nurse", "Nurse", "Nurse", 
      "Nurse", "Anesthesiologist", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Nurse", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Anesthesiologist", "Physician", 
      "Physician", "Nurse", "Nurse", "Physician", "Anesthesiologist", 
      "Physician", "Nurse", "Nurse", "Nurse", "Nurse", "Anesthesiologist", 
      "Nurse", "Nurse", "Anesthesiologist", "Physician", "Physician"
      ), oid = c("o417", "o417", "o417", "o417", "o417", "o485", "o485", 
      "o485", "o485", "o844", "o844", "o844", "o844", "o844", "o844", 
      "o1083", "o1083", "o1083", "o1083", "o1083", "o1083", "o1677", 
      "o1677", "o1677", "o1677", "o1677", "o1677", "o1745", "o1745", 
      "o1745", "o1745", "o1887", "o1887", "o1887", "o1887", "o1887", 
      "o1887", "o1887", "o2216", "o2216", "o2216", "o2216", "o2216", 
      "o2216", "o2216", "o2887", "o2887", "o2887", "o2887", "o2887", 
      "o2887", "o2887", "o2887", "o3296", "o3296", "o3296", "o3296", 
      "o3296", "o3296", "o4038", "o4038", "o4038", "o4038", "o4038", 
      "o4038", "o4038", "o4038", "o4038", "o4665", "o4665", "o4665", 
      "o4665", "o4665", "o4665", "o4665", "o4824", "o4824", "o4824", 
      "o4824", "o4866", "o4866", "o4866", "o4866", "o4866", "o5960", 
      "o5960", "o5960", "o5960", "o6099", "o6099", "o6099", "o6099", 
      "o6099", "o6099", "o6099", "o6099", "o7276", "o7276", "o7276", 
      "o7276", "o7276", "o7276", "o7855", "o7855", "o7855", "o7855", 
      "o7855", "o7855", "o7855", "o7855", "o8332", "o8332", "o8332", 
      "o8332", "o8332", "o8332", "o8332", "o9535", "o9535", "o9535", 
      "o9535", "o9535", "o9535", "o9535", "o9773", "o9773", "o9773", 
      "o9773", "o10345", "o10345", "o10345", "o10345", "o10345", "o10345", 
      "o10345", "o10345", "o10345", "o10345", "o10345", "o10345", "o10787", 
      "o10787", "o10787", "o10787", "o10787", "o10787", "o10787", "o10787", 
      "o10799", "o10799", "o10799", "o10799", "o10799", "o10799", "o10799", 
      "o10823", "o10823", "o10823", "o10823", "o10823", "o10823", "o11083", 
      "o11083", "o11083", "o11083", "o11130", "o11130", "o11130", "o11130", 
      "o11130", "o11130", "o11130", "o11130", "o11130", "o11752", "o11752", 
      "o11752", "o11752", "o11752", "o12251", "o12251", "o12251", "o12251", 
      "o12251", "o12251", "o12251", "o12251", "o12251", "o12908", "o12908", 
      "o12908", "o12908", "o12908", "o12908", "o13239", "o13239", "o13239", 
      "o13239", "o13239", "o13239", "o13239", "o13239", "o13239", "o13239", 
      "o13239", "o13239", "o13239", "o13239", "o13311", "o13311", "o13311", 
      "o13311", "o13311", "o13476", "o13476", "o13476", "o13476", "o13476", 
      "o13476", "o14487", "o14487", "o14487", "o14487", "o14582", "o14582", 
      "o14582", "o14582", "o14582", "o14594", "o14594", "o14594", "o14594", 
      "o14594", "o14594", "o14594", "o14594", "o14594", "o14594", "o14594", 
      "o14975", "o14975", "o14975", "o14975", "o14975", "o14975", "o14975", 
      "o15127", "o15127", "o15127", "o15127", "o15776", "o15776", "o15776", 
      "o15776", "o16086", "o16086", "o16086", "o16086", "o16258", "o16258", 
      "o16258", "o16258", "o16258", "o16585", "o16585", "o16585", "o16585", 
      "o16585", "o16585", "o16585", "o16585", "o18669", "o18669", "o18669", 
      "o18669", "o18921", "o18921", "o18921", "o18921", "o18921", "o18921", 
      "o19037", "o19037", "o19037", "o19037", "o19037", "o19037", "o19037", 
      "o19037", "o19151", "o19151", "o19151", "o19151", "o19151", "o19511", 
      "o19511", "o19511", "o19511", "o19511", "o19511", "o19703", "o19703", 
      "o19703", "o19703", "o19703", "o19703", "o19703", "o19703", "o20077", 
      "o20077", "o20077", "o20077", "o20077", "o20077", "o20077", "o20077", 
      "o20077", "o20077", "o20576", "o20576", "o20576", "o20576", "o20576", 
      "o20576", "o20576", "o20576", "o20576", "o23257", "o23257", "o23257", 
      "o23257", "o23257", "o23257", "o24617", "o24617", "o24617", "o24617", 
      "o25950", "o25950", "o25950", "o25950", "o25950", "o27339", "o27339", 
      "o27339", "o27339", "o27339", "o28545", "o28545", "o28545", "o28545", 
      "o28545", "o28545", "o31305", "o31305", "o31305", "o31305", "o31537", 
      "o31537", "o31537", "o31537", "o31537", "o34001", "o34001", "o34001", 
      "o34001", "o34001", "o35072", "o35072", "o35072", "o35072", "o35593", 
      "o35593", "o35593", "o35593", "o35593", "o35593", "o35764", "o35764", 
      "o35764", "o35764", "o37791", "o37791", "o37791", "o37791", "o38486", 
      "o38486", "o38486", "o38486", "o38486", "o43255", "o43255", "o43255", 
      "o43255", "o43255", "o43255", "o45270", "o45270", "o45270", "o45270", 
      "o45270", "o45270", "o45270", "o45270", "o48337", "o48337", "o48337", 
      "o48337", "o48337", "o48337", "o48337", "o48337", "o48337", "o50322", 
      "o50322", "o50322", "o50322", "o50322", "o54496", "o54496", "o54496", 
      "o54496", "o54496", "o54496", "o54496", "o65420", "o65420", "o65420", 
      "o65420", "o65420", "o65420", "o65420", "o65420", "o65420", "o73076", 
      "o73076", "o73076", "o73076", "o73253", "o73253", "o73253", "o73253", 
      "o74681", "o74681", "o74681", "o74681", "o74681", "o74681", "o74681", 
      "o75274", "o75274", "o75274", "o75274", "o75274", "o75274", "o76855", 
      "o76855", "o76855", "o76855", "o78329", "o78329", "o78329", "o78329", 
      "o78329", "o78329", "o78329", "o78329", "o78329", "o78329", "o78329"
      ), o3.month.date = structure(c(16861, 16861, 16861, 16861, 16861, 
      16892, 16892, 16892, 16892, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16892, 16892, 16892, 16892, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16922, 16922, 16922, 16922, 
      16922, 16892, 16892, 16892, 16892, 16892, 16892, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16892, 16892, 
      16892, 16892, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16892, 16892, 16892, 16892, 16892, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16922, 16922, 16922, 
      16922, 16922, 16922, 16922, 16922, 16922, 16922, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16861, 16861, 16861, 
      16861, 16922, 16922, 16922, 16922, 16922, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16922, 16922, 16922, 
      16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 
      16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 
      16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 
      16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 
      16922, 16922, 16922, 16922, 16922, 16922, 16922, 16922, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861), class = "Date"), o3.month.date.previous = structure(c(NA, 
      NA, NA, NA, NA, 16861, 16861, 16861, 16861, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, NA, NA, NA, NA, NA, NA, NA, 16861, 16861, 16861, 16861, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, 16892, 16892, 16892, 16892, 
      16892, 16861, 16861, 16861, 16861, 16861, 16861, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, 16861, 16861, 16861, 16861, NA, 
      NA, NA, NA, NA, NA, NA, NA, 16861, 16861, 16861, 16861, 16861, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, NA, NA, 
      NA, NA, NA, NA, NA, NA, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16861, 16861, NA, NA, NA, NA, 16892, 16892, 16892, 16892, 
      16892, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 16861, 
      16861, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 16892, 
      16892, 16892, 16892, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
      NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), class = "Date")), row.names = c(NA, 
      -470L), class = c("tbl_df", "tbl", "data.frame"))

当前代码:

  d1 <- 
    d %>% 
    ddply(c('aid', 'p3.role'), function(x){
      
      registerDoMC(4)
      unregister <- function() {
        env <- foreach:::.foreachGlobals
        rm(list=ls(name=env), pos=env)
      }
      
      x %>% 
        ddply('o3.month.date', function(i){
          past <-
            x  %>% 
            filter(o3.month.date == i$o3.month.date.previous[1]) %>% 
            group_by(pid) %>% 
            summarise(n = n()) %>% 
            ungroup 
          
          current <-
            i %>% 
            left_join(
              past,
              by = 'pid'
            ) %>% 
            distinct %>% 
            mutate(n = ifelse(is.na(n), 0, n)) %>% 
            summarise(
              a1.joint = mean(n) 
            )
          
          unregister()
          
          current
          
        }, .parallel = T)
      
    }, .progress = 'text')
  
  d1
r loops processing-efficiency coding-efficiency
1个回答
0
投票

这就是我想你想要的,虽然我没有完全理解最终目标。最好始终提供所需的输出,即使只是您数据的一个子集,这样其他人可以更好地了解您的需求。从你的问题来看,你已经有了正确的答案,只是速度慢而已。

以下

ans1
与第一个问题相关,
ans2
与第二个问题相关。我真的不明白问题二,所以我的解决方案很可能不是您所需要的。两者都在我的电脑上即时执行。

counts <- d %>%
  group_by(aid, pid, o3.month.date) %>%
  summarise(n = n()) %>%
  ungroup() %>%
  right_join(
    d,
    by = c(
      "aid" = "aid",
      "pid" = "pid",
      "o3.month.date" = "o3.month.date.previous"
    )
  ) %>%
  arrange(o3.month.date.y, aid, pid) %>% 
  rename(
    o3.month.date.previous = "o3.month.date",
    o3.month.date = "o3.month.date.y"
  ) %>% 
  mutate(
    n = if_else(is.na(n), 0L, n)
  )


ans1 <- counts %>% filter(!is.na(o3.month.date.previous))
ans1

ans2 <- d %>% 
  group_by(aid, pid, p3.role, o3.month.date) %>%
  summarise(n = n()) %>% 
  ungroup() %>% 
  group_by(aid, pid, p3.role) %>% 
  summarise(avg = mean(n))

ans2
© www.soinside.com 2019 - 2024. All rights reserved.