2016-08-01 1 views
0

이 질문은 내 스포츠 직업을 위해 최적화하려고하는 R 코드와 관련이 있습니다. 스포츠 팬을위한 컨텍스트는 농구입니다. 내 임무는 다음과 같은 연극 및 플레이어 ID 데이터 프레임을 사용하여 언제든지 농구 코트에 누가 있는지 추정합니다 (5 명). 데이터 데이터 프레임은 농구 경기와 일치합니다. 따라서 내가 작업중인 데이터 세트는 각 농구 유형별로 나누어 진 농구 경기 데이터입니다. 농구 팀에는 약 10 개의 고유 한 플레이어 ID가 있습니다.for 루프 - 농구 컨텍스트의 속도 향상, 법원에서 누구를 추측

team1 = c(76580, 76584, 76593, 76586, 76583, 76585, 76588, 76596, 76582, 76592, 76589, 76587) 

data = structure(list(Tag_ID = c(69, 65, 74, 113, 64, 74, 77, 97, 64, 
74, 80, 85, 67, 74, 86, 117, 73, 91, 64, 74, 71, 82, 83, 107, 
63, 95, 63, 90, 64, 74, 77, 85, 67, 74, 77, 85, 67, 74, 71, 89, 
64, 74, 87, 64, 74, 78, 97, 64, 74, 88, 64, 74, 87, 64, 74, 88, 
64, 70, 77, 85, 67, 74, 77, 85, 67, 73, 78, 97, 64, 70, 92, 64, 
74, 77, 85, 67, 74, 80, 97, 64, 70, 71, 92, 64, 74, 78, 97, 64, 
74, 78, 82, 67, 85, 74, 72, 78, 86, 117, 74, 72, 80, 85, 67, 
73, 92, 64, 74, 101, 63, 90, 63, 90, 63, 90, 64, 74, 97, 64, 
74, 77, 97, 64, 74, 89, 64, 74, 91, 64, 74, 77, 83, 112, 64, 
74, 80, 85, 67, 74, 99, 69, 64, 74, 78, 97, 64, 74, 77, 67, 67, 
74, 80, 67, 67, 74, 86, 117, 73, 92, 64, 74, 111, 64, 74, 77, 
83, 82, 67, 67, 74, 80, 85, 67, 74, 88, 64, 74, 107, 63, 90, 
63, 81, 97, 64, 74, 78, 86, 117, 74, 89, 64, 74, 80, 85, 67, 
74, 77, 83, 80, 85, 67, 73, 80, 83, 109, 63, 95, 63, 90, 64, 
74, 71, 92, 64, 74, 72, 107, 63, 95, 63, 90, 64, 74, 92, 64, 
74, 82, 85, 67, 74, 82, 83, 106, 63, 90, 64, 74, 77, 85, 67, 
74, 77, 83, 113, 64, 74, 71, 114, 64, 74, 80, 83, 106, 63, 81, 
97, 64, 73, 97, 64, 74, 113, 64, 74, 82, 85, 67, 74, 80, 85, 
67, 73, 92, 69, 64, 74, 72, 91, 64, 74, 80, 85, 67, 73, 97, 64, 
74, 87, 64, 74, 80, 85, 67, 74, 77, 85, 67, 74, 88, 64, 70, 112, 
64, 74, 87, 64, 74, 98, 64, 74, 71, 92, 64, 74, 86, 117, 73, 
92, 64, 74, 71, 82, 97, 64, 74, 78, 97, 64, 76, 86, 117, 73, 
107, 63, 90, 63, 90, 64, 74, 78, 97, 64, 74, 80, 83, 105, 63, 
90, 67, 74, 92, 64, 74, 86, 117, 73, 88, 64, 74, 72, 91, 64, 
74, 97, 64, 74, 86, 117, 74, 87, 64, 74, 71, 100, 63, 90, 64, 
74, 88, 64, 70, 77, 97, 64, 74, 87, 64, 74, 101, 63, 95, 63, 
95, 63, 81, 85, 67, 74, 99, 69, 64, 74, 82, 85, 67, 74, 87, 64, 
74, 86, 117, 73, 92, 64, 74, 87, 64, 74, 97, 64, 74, 77, 85, 
67, 74, 106, 63, 90, 64, 74, 88, 64, 76, 72, 92, 64, 74, 72, 
82, 83, 88, 64, 74, 82, 85, 67, 74, 87, 64, 74, 78, 97, 64, 74, 
86, 117, 73, 107, 63, 95, 63, 81, 85, 67, 74, 72, 92, 64, 74, 
80, 85, 67, 74, 80, 85, 67, 74, 88, 64, 74, 77, 85, 67, 74, 71, 
78, 86, 117, 74, 82, 83, 82, 110, 64, 74, 78, 117, 74, 82, 110, 
64, 70, 91, 64, 74, 88, 63, 81, 85, 67, 74, 97, 64, 74, 99), 
    Tag_ID_Play = c("New Period", "Jumpball", "Halfcourt", "Violation", 
    "Inbounds", "Halfcourt", "3pt Miss", "OOB", "Inbounds", "Halfcourt", 
    "Jumper Miss", "DRB", "DRB", "Halfcourt", "Steal", "Steal", 
    "Fastbreak", "Jumper Make", "Inbounds", "Halfcourt", "Drive Left", 
    "Layup Miss", "ORB", "Shoot Foul Layup Miss", "FT Attempt", 
    "Non-Last FT Miss", "FT Attempt", "FT Make", "Inbounds", 
    "Halfcourt", "3pt Miss", "DRB", "DRB", "Halfcourt", "3pt Miss", 
    "DRB", "DRB", "Halfcourt", "Drive Left", "Dunk Make", "Inbounds", 
    "Halfcourt", "3pt Make", "Inbounds", "Halfcourt", "Deflection", 
    "OOB", "Inbounds", "Halfcourt", "Def Foul", "Inbounds", "Halfcourt", 
    "3pt Make", "Inbounds", "Halfcourt", "Def Foul", "Inbounds", 
    "Baseline", "3pt Miss", "DRB", "DRB", "Halfcourt", "3pt Miss", 
    "DRB", "DRB", "Fastbreak", "Deflection", "OOB", "Inbounds", 
    "Baseline", "Layup Make", "Inbounds", "Halfcourt", "3pt Miss", 
    "DRB", "DRB", "Halfcourt", "Jumper Miss", "OOB", "Inbounds", 
    "Baseline", "Drive Left", "Layup Make", "Inbounds", "Halfcourt", 
    "Deflection", "OOB", "Inbounds", "Halfcourt", "Deflection", 
    "Layup Miss", "DRB", "DRB", "Halfcourt", "Drive Right", "Deflection", 
    "Steal", "Steal", "Halfcourt", "Drive Right", "Jumper Miss", 
    "DRB", "DRB", "Fastbreak", "Layup Make", "Inbounds", "Halfcourt", 
    "Shoot Foul 3pt Miss", "FT Attempt", "FT Make", "FT Attempt", 
    "FT Make", "FT Attempt", "FT Make", "Inbounds", "Halfcourt", 
    "OOB", "Inbounds", "Halfcourt", "3pt Miss", "OOB", "Inbounds", 
    "Halfcourt", "Dunk Make", "Inbounds", "Halfcourt", "Jumper Make", 
    "Inbounds", "Halfcourt", "3pt Miss", "ORB", "Tipin Make", 
    "Inbounds", "Halfcourt", "Jumper Miss", "DRB", "DRB", "Halfcourt", 
    "Period Ends Play", "New Period", "Inbounds", "Halfcourt", 
    "Deflection", "OOB", "Inbounds", "Halfcourt", "3pt Miss", 
    "DRB", "DRB", "Halfcourt", "Jumper Miss", "DRB", "DRB", "Halfcourt", 
    "Steal", "Steal", "Fastbreak", "Layup Make", "Inbounds", 
    "Halfcourt", "Timeout", "Inbounds", "Halfcourt", "3pt Miss", 
    "ORB", "Layup Miss", "DRB", "DRB", "Halfcourt", "Jumper Miss", 
    "DRB", "DRB", "Halfcourt", "Def Foul", "Inbounds", "Halfcourt", 
    "Shoot Foul Layup Miss", "FT Attempt", "FT Make", "FT Attempt", 
    "Last FT Miss", "OOB", "Inbounds", "Halfcourt", "Deflection", 
    "Steal", "Steal", "Halfcourt", "Dunk Make", "Inbounds", "Halfcourt", 
    "Jumper Miss", "DRB", "DRB", "Halfcourt", "3pt Miss", "ORB", 
    "Jumper Miss", "DRB", "DRB", "Fastbreak", "Jumper Miss", 
    "ORB", "Shoot Foul Tipin Miss", "FT Attempt", "Non-Last FT Miss", 
    "FT Attempt", "FT Make", "Inbounds", "Halfcourt", "Drive Left", 
    "Layup Make", "Inbounds", "Halfcourt", "Drive Right", "Shoot Foul Layup Miss", 
    "FT Attempt", "Non-Last FT Miss", "FT Attempt", "FT Make", 
    "Inbounds", "Halfcourt", "Layup Make", "Inbounds", "Halfcourt", 
    "Layup Miss", "DRB", "DRB", "Halfcourt", "Layup Miss", "ORB", 
    "Shoot Foul Layup Make", "FT Attempt", "FT Make", "Inbounds", 
    "Halfcourt", "3pt Miss", "DRB", "DRB", "Halfcourt", "3pt Miss", 
    "ORB", "Violation", "Inbounds", "Halfcourt", "Drive Left", 
    "Charge", "Inbounds", "Halfcourt", "Jumper Miss", "ORB", 
    "Shoot Foul Layup Make", "FT Attempt", "Last FT Miss", "OOB", 
    "Inbounds", "Fastbreak", "OOB", "Inbounds", "Halfcourt", 
    "Violation", "Inbounds", "Halfcourt", "Layup Miss", "DRB", 
    "DRB", "Halfcourt", "Jumper Miss", "DRB", "DRB", "Fastbreak", 
    "Layup Make", "New Period", "Inbounds", "Halfcourt", "Drive Right", 
    "Jumper Make", "Inbounds", "Halfcourt", "Jumper Miss", "DRB", 
    "DRB", "Fastbreak", "OOB", "Inbounds", "Halfcourt", "3pt Make", 
    "Inbounds", "Halfcourt", "Jumper Miss", "DRB", "DRB", "Halfcourt", 
    "3pt Miss", "DRB", "DRB", "Halfcourt", "Def Foul", "Inbounds", 
    "Baseline", "Tipin Make", "Inbounds", "Halfcourt", "3pt Make", 
    "Inbounds", "Halfcourt", "Other End", "Inbounds", "Halfcourt", 
    "Drive Left", "Layup Make", "Inbounds", "Halfcourt", "Steal", 
    "Steal", "Fastbreak", "Layup Make", "Inbounds", "Halfcourt", 
    "Drive Left", "Layup Miss", "OOB", "Inbounds", "Halfcourt", 
    "Deflection", "OOB", "Inbounds", "Sideline", "Steal", "Steal", 
    "Fastbreak", "Shoot Foul Layup Miss", "FT Attempt", "FT Make", 
    "FT Attempt", "FT Make", "Inbounds", "Halfcourt", "Deflection", 
    "OOB", "Inbounds", "Halfcourt", "Jumper Miss", "ORB", "Shoot Foul Jumper Miss", 
    "FT Attempt", "FT Make", "DRB", "Halfcourt", "Layup Make", 
    "Inbounds", "Halfcourt", "Steal", "Steal", "Fastbreak", "Def Foul", 
    "Inbounds", "Halfcourt", "Drive Right", "Jumper Make", "Inbounds", 
    "Halfcourt", "OOB", "Inbounds", "Halfcourt", "Steal", "Steal", 
    "Halfcourt", "3pt Make", "Inbounds", "Halfcourt", "Drive Left", 
    "Shoot Foul 3pt Make", "FT Attempt", "FT Make", "Inbounds", 
    "Halfcourt", "Def Foul", "Inbounds", "Baseline", "3pt Miss", 
    "OOB", "Inbounds", "Halfcourt", "3pt Make", "Inbounds", "Halfcourt", 
    "Shoot Foul 3pt Miss", "FT Attempt", "Non-Last FT Miss", 
    "FT Attempt", "Non-Last FT Miss", "FT Attempt", "Last FT Miss", 
    "DRB", "DRB", "Halfcourt", "Period Ends Play", "New Period", 
    "Inbounds", "Halfcourt", "Layup Miss", "DRB", "DRB", "Halfcourt", 
    "3pt Make", "Inbounds", "Halfcourt", "Steal", "Steal", "Fastbreak", 
    "Layup Make", "Inbounds", "Halfcourt", "3pt Make", "Inbounds", 
    "Halfcourt", "OOB", "Inbounds", "Halfcourt", "3pt Miss", 
    "DRB", "DRB", "Halfcourt", "Shoot Foul Layup Make", "FT Attempt", 
    "FT Make", "Inbounds", "Halfcourt", "Def Foul", "Inbounds", 
    "Sideline", "Drive Right", "Layup Make", "Inbounds", "Halfcourt", 
    "Drive Right", "Layup Miss", "ORB", "Def Foul", "Inbounds", 
    "Halfcourt", "Layup Miss", "DRB", "DRB", "Halfcourt", "3pt Make", 
    "Inbounds", "Halfcourt", "Deflection", "OOB", "Inbounds", 
    "Halfcourt", "Steal", "Steal", "Fastbreak", "Shoot Foul Layup Miss", 
    "FT Attempt", "Non-Last FT Miss", "FT Attempt", "Last FT Miss", 
    "DRB", "DRB", "Halfcourt", "Drive Right", "Layup Make", "Inbounds", 
    "Halfcourt", "Jumper Miss", "DRB", "DRB", "Halfcourt", "Jumper Miss", 
    "DRB", "DRB", "Halfcourt", "Def Foul", "Inbounds", "Halfcourt", 
    "3pt Miss", "DRB", "DRB", "Halfcourt", "Drive Left", "Deflection", 
    "Steal", "Steal", "Halfcourt", "Layup Miss", "ORB", "Layup Miss", 
    "Tie Up", "Inbounds", "Halfcourt", "Deflection", "Steal", 
    "Halfcourt", "Layup Miss", "Tie Up", "Inbounds", "Baseline", 
    "Jumper Make", "Inbounds", "Halfcourt", "Def Foul", "FT Attempt", 
    "Last FT Miss", "DRB", "DRB", "Halfcourt", "OOB", "Inbounds", 
    "Halfcourt", "Period Ends Play"), player_id = c(NA, 76580L, 
    NA, 76584L, NA, NA, 76599L, NA, NA, NA, 76593L, 76607L, 76607L, 
    NA, 76593L, 76593L, NA, 76580L, NA, NA, 76600L, 76600L, 76607L, 
    76607L, 76607L, NA, 76607L, 76607L, NA, NA, 76586L, 76599L, 
    76599L, NA, 76607L, 76593L, 76593L, NA, 76583L, 76580L, NA, 
    NA, 76599L, NA, NA, 76599L, 76583L, NA, NA, 76586L, NA, NA, 
    76607L, NA, NA, 76599L, NA, NA, 76583L, 76607L, 76607L, NA, 
    76607L, 76584L, 76584L, NA, 76605L, NA, NA, NA, 76593L, NA, 
    NA, 76607L, 76593L, 76593L, NA, 76580L, NA, NA, NA, 76583L, 
    76583L, NA, NA, 76586L, NA, NA, NA, 76593L, 76605L, 76586L, 
    76586L, NA, 76586L, 76599L, 76599L, 76599L, NA, 76599L, 76607L, 
    76584L, 76584L, NA, 76586L, NA, NA, 76599L, 76599L, 76599L, 
    76599L, 76599L, 76599L, 76599L, NA, NA, 76586L, NA, NA, 76599L, 
    NA, NA, NA, 76585L, NA, NA, 76607L, NA, NA, 76584L, 76588L, 
    76588L, NA, NA, 76603L, 76583L, 76583L, NA, NA, NA, NA, NA, 
    76593L, NA, NA, NA, 76607L, 76580L, 76580L, NA, 76593L, 76607L, 
    76607L, NA, 76593L, 76593L, NA, 76593L, NA, NA, NA, NA, NA, 
    76607L, 76605L, 76605L, 76596L, 76596L, NA, 76580L, 76607L, 
    76607L, NA, 76580L, NA, NA, 76607L, 76607L, 76607L, 76607L, 
    NA, NA, NA, NA, 76593L, 76593L, 76593L, NA, 76580L, NA, NA, 
    76607L, 76593L, 76593L, NA, 76593L, 76583L, 76583L, 76605L, 
    76605L, NA, 76603L, 76607L, 76607L, 76607L, NA, 76607L, 76607L, 
    NA, NA, 76583L, 76583L, NA, NA, 76603L, 76603L, 76603L, NA, 
    76603L, 76603L, NA, NA, 76580L, NA, NA, 76607L, 76583L, 76583L, 
    NA, 76583L, 76580L, 76580L, 76580L, 76580L, NA, NA, 76605L, 
    76583L, 76583L, NA, 76580L, 76593L, 76583L, NA, NA, 76605L, 
    76605L, NA, NA, 76583L, 76585L, 76583L, 76583L, NA, NA, NA, 
    NA, 76607L, NA, NA, NA, NA, NA, 76593L, 76605L, 76605L, NA, 
    76603L, 76588L, 76588L, NA, 76585L, NA, NA, NA, 76583L, 76580L, 
    NA, NA, 76599L, 76593L, 76593L, NA, 76593L, NA, NA, 76600L, 
    NA, NA, 76586L, 76599L, 76599L, NA, 76599L, 76593L, 76593L, 
    NA, 76599L, NA, NA, 76583L, NA, NA, 76607L, NA, NA, NA, NA, 
    NA, 76586L, 76586L, NA, NA, 76593L, 76593L, NA, 76584L, NA, 
    NA, 76603L, 76603L, NA, NA, NA, 76586L, NA, NA, NA, 76586L, 
    76586L, NA, 76586L, 76586L, 76586L, 76586L, 76586L, NA, NA, 
    76583L, NA, NA, NA, 76607L, 76606L, 76606L, 76606L, 76606L, 
    76596L, NA, 76596L, NA, NA, 76593L, 76593L, NA, 76607L, NA, 
    NA, 76584L, 76586L, NA, NA, 76601L, NA, NA, 76603L, 76603L, 
    NA, 76601L, NA, NA, 76584L, 76593L, 76593L, 76593L, NA, NA, 
    76593L, NA, NA, 76599L, NA, NA, NA, 76583L, NA, NA, 76601L, 
    76601L, NA, 76601L, NA, 76601L, NA, 76596L, 76596L, NA, NA, 
    NA, NA, NA, 76606L, 76596L, 76596L, NA, 76593L, NA, NA, 76593L, 
    76593L, NA, 76584L, NA, NA, 76607L, NA, NA, 76584L, NA, NA, 
    76607L, 76582L, 76582L, NA, 76596L, 76596L, 76596L, NA, NA, 
    76582L, NA, NA, 76599L, 76599L, NA, NA, 76584L, 76584L, 76596L, 
    76599L, NA, NA, 76588L, 76603L, 76603L, NA, 76607L, NA, NA, 
    76602L, NA, NA, NA, 76602L, 76602L, NA, 76603L, 76603L, NA, 
    76603L, NA, 76585L, 76585L, NA, 76584L, 76585L, NA, NA, 76599L, 
    76582L, 76582L, NA, 76580L, 76602L, 76602L, NA, 76582L, NA, 
    NA, 76605L, 76592L, 76592L, NA, 76586L, 76604L, 76604L, 76604L, 
    NA, 76606L, 76606L, 76606L, 76606L, NA, NA, 76606L, 76606L, 
    NA, 76606L, 76606L, NA, NA, 76602L, NA, NA, 76602L, 76589L, 
    NA, 76602L, 76602L, NA, 76601L, NA, NA, NA), player2_id = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 76607L, 
    76607L, NA, 76583L, NA, NA, NA, NA, NA, 76584L, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 76583L, NA, 
    NA, 76607L, NA, NA, 76583L, NA, NA, NA, 76603L, NA, NA, 76603L, 
    NA, NA, 76583L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 76593L, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 76607L, NA, NA, NA, 76605L, 76593L, NA, NA, NA, 
    NA, 76585L, 76585L, 76585L, NA, NA, NA, NA, NA, NA, 76584L, 
    NA, NA, 76583L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, 76584L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, 76599L, NA, NA, NA, 76580L, 
    NA, NA, NA, NA, NA, NA, NA, 76603L, 76603L, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 76607L, 
    NA, NA, 76596L, NA, NA, NA, NA, NA, NA, NA, 76606L, 76606L, 
    76606L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 76593L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 76586L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 76602L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, 76584L, NA, NA, NA, NA, 76605L, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 76583L, NA, NA, NA, NA, 76583L, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 76599L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    76583L, NA, NA, 76584L, NA, NA, 76600L, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, 76605L, 76605L, NA, 76593L, NA, NA, NA, 76584L, 
    NA, NA, NA, 76599L, NA, NA, NA, 76600L, 76600L, NA, 76607L, 
    NA, NA, NA, NA, NA, NA, 76607L, NA, NA, NA, NA, NA, 76588L, 
    NA, NA, NA, NA, 76593L, NA, NA, 76600L, 76600L, NA, 76586L, 
    NA, NA, NA, 76584L, NA, NA, NA, NA, NA, 76583L, 76583L, NA, 
    76607L, NA, NA, NA, 76599L, NA, NA, NA, NA, 76606L, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, 76586L, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, 76596L, NA, NA, NA, 76583L, NA, 
    NA, 76607L, 76607L, NA, 76593L, NA, NA, 76601L, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, 76599L, NA, NA, NA, NA, 76599L, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 76596L, NA, NA, NA, NA, NA, 
    NA, 76602L, NA, NA, 76584L, NA, NA, NA, 76580L, 76580L, NA, 
    76580L, NA, NA, NA, NA, NA, NA, NA, NA, 76584L, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, 76599L, NA, NA, NA, NA, NA, NA, 
    NA, 76586L, 76586L, 76586L, NA, 76587L, NA, NA, 76592L, NA, 
    NA, 76592L, 76592L, NA, 76589L, 76589L, NA, NA, NA, NA, NA, 
    76589L, NA, NA, NA, NA, NA, NA, NA, NA, NA), indicator_newperiod = c(1, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("Tag_ID", 
"Tag_ID_Play", "player_id", "player2_id", "indicator_newperiod" 
), class = "data.frame", row.names = c(1L, 512L, 513L, 514L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 
29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 
42L, 43L, 44L, 45L, 47L, 46L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 
55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 
68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 
81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 90L, 89L, 91L, 92L, 93L, 
94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 
106L, 107L, 108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L, 
117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L, 125L, 126L, 127L, 
128L, 129L, 130L, 131L, 132L, 133L, 134L, 135L, 136L, 137L, 138L, 
139L, 140L, 141L, 142L, 143L, 144L, 145L, 146L, 147L, 148L, 149L, 
150L, 151L, 152L, 153L, 154L, 155L, 156L, 157L, 158L, 159L, 160L, 
161L, 162L, 163L, 164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L, 
172L, 173L, 174L, 175L, 176L, 177L, 178L, 179L, 180L, 181L, 182L, 
183L, 184L, 185L, 186L, 187L, 188L, 189L, 190L, 191L, 192L, 193L, 
194L, 195L, 196L, 197L, 201L, 198L, 199L, 200L, 202L, 203L, 204L, 
205L, 206L, 207L, 208L, 209L, 210L, 211L, 212L, 213L, 214L, 215L, 
216L, 217L, 218L, 219L, 220L, 221L, 222L, 223L, 224L, 225L, 226L, 
227L, 228L, 229L, 230L, 231L, 232L, 233L, 234L, 235L, 236L, 237L, 
238L, 239L, 240L, 241L, 242L, 244L, 243L, 245L, 246L, 247L, 249L, 
248L, 250L, 251L, 252L, 253L, 254L, 255L, 256L, 257L, 258L, 259L, 
260L, 261L, 262L, 263L, 264L, 265L, 266L, 267L, 268L, 269L, 274L, 
270L, 271L, 272L, 273L, 275L, 276L, 277L, 278L, 279L, 280L, 281L, 
282L, 284L, 283L, 285L, 286L, 287L, 288L, 289L, 290L, 291L, 292L, 
293L, 294L, 295L, 296L, 298L, 297L, 299L, 300L, 301L, 302L, 303L, 
304L, 305L, 306L, 307L, 308L, 309L, 310L, 311L, 312L, 313L, 314L, 
315L, 316L, 317L, 318L, 319L, 320L, 321L, 322L, 323L, 502L, 503L, 
504L, 505L, 506L, 507L, 324L, 325L, 326L, 327L, 328L, 329L, 330L, 
331L, 332L, 333L, 334L, 335L, 336L, 337L, 338L, 339L, 340L, 341L, 
342L, 343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, 351L, 352L, 
353L, 354L, 355L, 356L, 357L, 358L, 359L, 360L, 361L, 362L, 363L, 
364L, 365L, 366L, 367L, 368L, 369L, 370L, 371L, 372L, 373L, 374L, 
375L, 376L, 377L, 378L, 379L, 380L, 381L, 382L, 383L, 384L, 385L, 
386L, 387L, 388L, 389L, 390L, 391L, 392L, 393L, 394L, 395L, 396L, 
397L, 398L, 399L, 400L, 401L, 402L, 403L, 404L, 405L, 406L, 407L, 
408L, 409L, 410L, 411L, 412L, 413L, 414L, 415L, 416L, 417L, 418L, 
419L, 420L, 421L, 422L, 423L, 424L, 425L, 426L, 427L, 428L, 429L, 
430L, 431L, 432L, 433L, 434L, 435L, 436L, 437L, 438L, 439L, 440L, 
441L, 442L, 443L, 444L, 445L, 446L, 447L, 448L, 449L, 450L, 451L, 
452L, 453L, 454L, 455L, 456L, 457L, 458L, 459L, 460L, 461L, 462L, 
463L, 464L, 465L, 466L, 467L, 468L, 469L, 470L, 471L, 472L, 473L, 
474L, 475L, 476L, 477L, 478L, 479L, 480L, 481L, 482L, 483L, 484L, 
485L, 486L, 508L, 509L, 510L, 511L, 487L, 488L, 489L, 490L, 491L, 
492L, 493L, 494L, 495L, 496L, 497L, 498L, 499L, 500L, 501L)) 

다음, 아래 (만 기본 NAS가 초기화에 작성되지) 내가 채우기 위해 시도하고있는 on_court dataframe입니다 : 내가 코드와 함께 작동하는 몇 가지 가능한 데이터 아래에 있습니다. on_court 데이터 프레임의 행 수는 데이터 데이터 프레임의 행 수와 같습니다. 나는 각자의 놀이에 대해 누가 법정에 있는지를 효과적으로 추측하고 있습니다. 일단 채워지면 on_court 데이터 프레임의 각 행에는 5 개의 player_ID가 생깁니다.

head(on_court, n = 20) 
# P1 P2 P3 P4 P5 Q1 Q2 Q3 Q4 Q5 
# 1 NA NA NA NA NA NA NA NA NA NA 
# 2 NA NA NA NA NA NA NA NA NA NA 
# 3 NA NA NA NA NA NA NA NA NA NA 
# 4 NA NA NA NA NA NA NA NA NA NA 
# 5 NA NA NA NA NA NA NA NA NA NA 
# 6 NA NA NA NA NA NA NA NA NA NA 
# 7 NA NA NA NA NA NA NA NA NA NA 
# 8 NA NA NA NA NA NA NA NA NA NA 
# 9 NA NA NA NA NA NA NA NA NA NA 
# 10 NA NA NA NA NA NA NA NA NA NA 
# 11 NA NA NA NA NA NA NA NA NA NA 
# 12 NA NA NA NA NA NA NA NA NA NA 
# 13 NA NA NA NA NA NA NA NA NA NA 
# 14 NA NA NA NA NA NA NA NA NA NA 
# 15 NA NA NA NA NA NA NA NA NA NA 
# 16 NA NA NA NA NA NA NA NA NA NA 
# 17 NA NA NA NA NA NA NA NA NA NA 
# 18 NA NA NA NA NA NA NA NA NA NA 
# 19 NA NA NA NA NA NA NA NA NA NA 
# 20 NA NA NA NA NA NA NA NA NA NA 

각 게임에 참여한 플레이어에 해당하는 두 개의 플레이어 ID 열을 사용하여이 사람은 다음과 같은 전략을 사용 코트에서 추측하는 것을 가능하게 - 나는 단순히 가정이 5 명 선수 누가 가장 최근에 사건에서 태그가 붙은 것은 법원에 있습니다. 데이터 데이터 프레임에는 농구 게임의 모든 플레이가 순서대로 포함되어있어이 접근법을 가능하게한다는 점에 유의해야합니다.

내 코드는 항상 가장 최근에 농구 경기에 출연 한 5 명의 플레이어 ID를 찾기 위해 전면 및 후면 카운터 (각각 i 및 j)를 사용하며 법원에서 5 명의 플레이어라고 가정합니다. 이 게임에는 514 plays/events/nrow (데이터)가 있습니다. 게임 당 최대 2 개의 플레이어 ID가 있기 때문에 작업 할 플레이어 ID는 1028 개입니다. 현재 코드는이 1028 개의 플레이어 ID를 반복하며 다음과 같이 보입니다. 이 코드는 위에있는 목록 및 데이터 프레임과 연결하여 실행할 수 있어야합니다.

# 1 - Before the for loop 
# 1.a create custom rounding function that rounds 0.5 upwards 
round2 = function(x, n) { 
    posneg = sign(x) 
    z = abs(x)*10^n 
    z = z + 0.5 
    z = trunc(z) 
    z = z/10^n 
    z*posneg 
} 

#1.b create on_court dataframe 
on_court = data.frame(matrix(ncol = 10, nrow = nrow(data))) 
names(on_court) = c("P1", "P2", "P3", "P4", "P5", "Q1", "Q2", "Q3", "Q4", "Q5") 

# 1.c combine the two player ID columns into one column 
player_ids_unlisted = as.vector(t(data[, c("player_id", "player2_id")])) 
K = 0.525 

j = 1 
# begin the for loop 
for(i in 1:length(player_ids_unlisted)) { 
    # dividing the counter in half gives the play number 
    i_2 = round2(i/2, 0) 
    j_2 = round2(j/2, 0) 

    # if the playtype is 'new period', bring the back counter j to match the front counter i. 
    # at the start of a new period of the game, this resets who we think is on the court 
    if (data$indicator_newperiod[i_2] == 1) { 
    j = i 
    j_2 = i_2 
    } 

    # unique player_IDs in range of events/counters, 
    # then remove NA player IDs, 
    # then filter the list by players only on team 1 
    uq_players = unique(player_ids_unlisted[j:i]) 
    uq_players = uq_players[!is.na(uq_players)] 
    uq_players = uq_players[uq_players %in% team1] 

    # length of unique player_ID list 
    uq_span = length(uq_players)      

    # early in the game, if 5 unique player_IDs have yet to appear, then pass 
    if(uq_span < 5) {       
     next           
    } 

    # if we have exactly 5 players identified, set them as the players on court 
    else if(uq_span == 5) {      
    on_court[i_2, 1:5] = uq_players 
    } 

    else {           
    # as the i counter increments, eventually the list of unique players will reach 6 players. 
    # when that is the case, I increment the back counter j until we get back down to 5 players 
    # (effectively removing the player who hasn't been tagged in an event for the most time from the list of 
    # players on court). Then I update whose on court again. 
    while (uq_span > 5) { 
     j = j + 1 

     # again, find IDs, remove NAs, filter by team 1 
     uq_players = unique(player_ids_unlisted[j:i])  
     uq_players = uq_players[!is.na(uq_players)] 
     uq_players = uq_players[uq_players %in% team1] 

     uq_span = length(uq_players) 
    } 

    # this j_2 is the play index that the player we're subbing out last was tagged in an event 
    # mid_idx is the index between when the j_2 player_ID was last in an event and the new i_2 player_ID was just in an event 
    j_2 = round2(j/2, 0) 
    mid_idx = round2((i_2*K + j_2*(1-K)), 0) 

    # update with this lineup going all the way back to the mid_idx play index 
    uq_players_df = as.data.frame(t(uq_players)) 
    count = i_2 - mid_idx + 1 

    # and finally update the on court dataframe 
    uq_players_df = uq_players_df[rep(row.names(uq_players_df), count), ] 
    on_court[mid_idx:i_2, 1:5] = uq_players_df  
    } 

    # for the earliest plays of each half, before 5 player IDs were identified 
    # we left NAs in the on_court dataframe for whose on court. 
    # once we have 5 player IDs, drag them up to fill in the earlier NAs 
    this_row_NA = ifelse(is.na(on_court$P1[i_2]), 1, 0) 
    last_row_NA = ifelse(is.na(on_court$P1[(i_2-1)]), 1, 0) 
    if (last_row_NA > this_row_NA) { 
    NA_plays = which(is.na(on_court$P1)) 
    start = min(NA_plays) 
    on_court[start:(i_2-1), 1:5] = on_court[i_2, 1:5] 
    } 
} 

그리고 이것이 내 코드입니다. 카운트 i와 j는 단지 514 개의 플레이가 있더라도 1028까지 카운트되기 때문에 약간 복잡합니다. 그래서 플레이 넘버를 인덱싱 할 때 i_2와 j_2 카운터를 사용해야합니다. 실제로 mid_idx 카운터를 도입하면 플레이어가 실제로 게임에 태그를 지정하기 전에 플레이어를 게임에 종속시키는 데 더 복잡해집니다. 하지만 내가 궁금해하는 주요한 문제는이 경우가 몇 가지 경우에 큰 for 루프에서 완전히 수행되고 현재 실행하는 데 너무 많은 시간이 걸린다는 것입니다 (게임 당 ~ 0.50 초). 수만 가지 농구 게임을 실행하려면이 코드가 필요하며이 코드가 1/10에서 1/100 (가능한 것은 아닐 수도 있음)로 실행하는 것이 좋습니다. 큰 for 루프 대신 코드를 벡터화하거나 적용 함수를 사용하면 코드를 더 빠르게 실행할 수 있지만 어떻게 구현할 수 있는지 생각하기가 어려웠습니다. 저는 이번 여름에 코드 성능을 개선하기 위해 열심히 노력했으며, 이와 같은 코드를 개선하는 것은 어렵지만 유용합니다. 어떤 생각이라도 내가 이것을 어떻게 할 수 있는지에 대해 감사 할 것입니다.

대단히 감사합니다.

+0

'i'가 1에서 시작하고 'i_2 = round (i/2, 0)'이면 'i_2'가 0이고 'if (data $ indicator_newperiod [i_2] == 1)'오류가 발생합니다. 재현 가능한 예제를 게시 할 수 있습니까? (데이터를 가지고'dput()'을 사용하십시오)? – Vandenman

+0

'on_court' 데이터 프레임에 개별 재생 행이 포함되어 있지 않습니까? 'data' 데이터 프레임과 같은 nrows가 아니라면, 그렇지 않으면 당신은 NA를 반환 할 것입니까? – Parfait

+0

내 잘못. 0.5 라운드까지 사용자 지정 라운드 함수가 있습니다. 나는 함수를 사용하여 게시물을 편집 할 것입니다. 또한 일부 전체 데이터를 사용하여 감사합니다. – Canovice

답변

0

불행히도 데이터 프레임의 모든 행을 반복해야한다고 생각합니다. 그러나, 나는 법원에서 5 명의 선수를 결정하는 당신의 알고리즘을 더 쉽게 할 수 있다고 생각합니다.내 솔루션에 난 단지 데이터의 행 수를 반복하고 나는 필드에서 선수 제어 할 길이 5의 벡터를 사용 : 나는 거꾸로 반복 휴식 후 기간을 채우는

for(i in 1:nrow(data)) { 

    # reset players on court 
    if(i == 1 | data$indicator_newperiod[i] == 1) poc = numeric(5) 

    # Add new Player1 (if any) 
    if(!is.na(data$player_id[i]) && !(data$player_id[i] %in% poc)) { 
     poc[1:4] = poc[2:5] 
     poc[5] = data$player_id[i] 
    } 

    # Add new Player2 (if any) 
    if(!is.na(data$player2_id[i]) && !(data$player2_id[i] %in% poc)) { 
     poc[1:4] = poc[2:5] 
     poc[5] = data$player2_id[i] 
    } 

    # fill result dataframe 
    on_court[i, 1:5] = poc 
} 

을 :

# Filling up players on court, after break 
for(i in nrow(on_court):2) { 
    if(on_court$P1[i-1] == 0) on_court[i-1, 1:5] = on_court[i, 1:5] 
} 
+0

감사! 법정에서 두 경기를 지켜 보았고 수동으로 태그를 지정 했으므로 법정에서의 정확성을 확인하기 위해 두 가지 게임이 있습니다. 나는 너의 제안으로 달릴 수 있고 그것이 내 것보다 더 정확한지 알아볼 수있다. – Canovice