具有一个具有3个匹配时刻(36,76,96)的跟踪数据集。我的要求是计算给定玩家与对手之间的距离。
数据框包含以下5列
- time_id (second or instant)
- player ( identifier for player)
- x (x position)
- y (y position)
- team (home or away)
作为家庭玩家= 26的示例>
我需要使用]计算距离>
全场球员(“ 12”,“ 17”,“ 24”,“ 37”,“ 69”,“ 77”)
在3个不同的time_id(36,76,96)
这里我们可以看到df数据https://pasteboard.co/ICiyyFB.png
这里是使用df下载示例rds的链接https://1drv.ms/u/s!Am7buNMZi-gwgeBpEyU0Fl9ucem-bw?e=oSTMhx
library(tidyverse) dat <- readRDS(file = "dat.rds") # Given home player with id 26 # I need to calculate on each time_id the euclidean distance # with all away players on each time_id p36_home <- dat %>% filter(player ==26) # all away players all_away <- dat %>% filter(team =='away') # I know I can calculate it if i put on columns but not elegant # and require it group by time_id # mutate(dist= round( sqrt((x1-x2)^2 +(y1-y2)^2),2) ) # below distances row by row should be calculated # time_id , homePlayer, awayPlayer , distance # # 36 , 26 , 12 , x # 36 , 26 , 17 , x # 36 , 26 , 24 , x # 36 , 26 , 37 , x # 36 , 26 , 69 , x # 36 , 26 , 77 , x # # 76 , 26 , 12 , x # 76 , 26 , 17 , x # 76 , 26 , 24 , x # 76 , 26 , 37 , x # 76 , 26 , 69 , x # 76 , 26 , 77 , x # # 96 , 26 , 12 , x # 96 , 26 , 17 , x # 96 , 26 , 24 , x # 96 , 26 , 37 , x # 96 , 26 , 69 , x # 96 , 26 , 77 , x
具有一个具有3个匹配时刻(36,76,96)的跟踪数据集。我的要求是计算给定玩家与对手之间的距离。数据框包含以下5列-time_id ...
此解决方案应为您工作。我只是加入了您提供的两个数据框并使用了距离计算。然后过滤列以获得所需的结果。
test <- left_join(p36_home,all_away,by="time_id")
test$dist <- round( sqrt((test$x.x-test$x.y)^2 +(test$y.x-test$y.y)^2),2)
test <- test[,c(1,2,6,10)]
names(test) <- c("time_id",'homePlayer','awayPlayer','distance')
test