Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的foverlaps选择得分最高的范围ID_R_Dataframe_Data.table - Fatal编程技术网

使用R中的foverlaps选择得分最高的范围ID

使用R中的foverlaps选择得分最高的范围ID,r,dataframe,data.table,R,Dataframe,Data.table,我想使用foverlaps从一个单独的列中选择数量最大的范围ID,在一个值位于重叠范围之间的设置中。虽然我非常熟悉软件包的基本设置,但我找不到执行上述功能的方法 这里有一个小例子 >df1 AthleteID Distance Athlete1 5 Athlete2 10 Athlete3 25 >df2 CheckpointID Start End Score Checkpoint1 1 8 2 Checkpoint2 7

我想使用foverlaps从一个单独的列中选择数量最大的范围ID,在一个值位于重叠范围之间的设置中。虽然我非常熟悉软件包的基本设置,但我找不到执行上述功能的方法

这里有一个小例子

>df1
AthleteID  Distance
Athlete1   5
Athlete2   10
Athlete3   25

>df2
CheckpointID   Start   End Score
Checkpoint1    1       8   2
Checkpoint2    7       12  4
Checkpoint3    9       15  6
Checkpoint4    16      26  8
Checkpoint5    20      30  10
根据上面的说明,最终的data.frame应该是这样的

>df1
AthleteID  Distance   Score  CheckpointID
Athlete1   5          2      Checkpoint1
Athlete2   10         6      Checkpoint3
Athlete3   25         10     Checkpoint5
>df1
AthleteID  Distance   Score  CheckpointID
Athlete1   5          2      Checkpoint1
Athlete2   10         7      Checkpoint3
Athlete3   25         11     Checkpoint5
=========================

编辑

最后一个问题;我还想知道如何根据运动员ID在相同的时间间隔内使用不同的检查点分数

>df2
CheckpointID   AthleteID   Start   End Score
Checkpoint1    Athlete1    1       8   2
Checkpoint2    Athlete1    7       12  4
Checkpoint3    Athlete1    9       15  6
Checkpoint4    Athlete1    16      26  8
Checkpoint5    Athlete1    20      30  10
Checkpoint1    Athlete2    1       8   3
Checkpoint2    Athlete2    7       12  5
Checkpoint3    Athlete2    9       15  7
Checkpoint4    Athlete2    16      26  9
Checkpoint5    Athlete2    20      30  11
Checkpoint1    Athlete3    1       8   1
Checkpoint2    Athlete3    7       12  3
Checkpoint3    Athlete3    9       15  5
Checkpoint4    Athlete3    16      26  7
Checkpoint5    Athlete3    20      30  11
最后的结果是这样的

>df1
AthleteID  Distance   Score  CheckpointID
Athlete1   5          2      Checkpoint1
Athlete2   10         6      Checkpoint3
Athlete3   25         10     Checkpoint5
>df1
AthleteID  Distance   Score  CheckpointID
Athlete1   5          2      Checkpoint1
Athlete2   10         7      Checkpoint3
Athlete3   25         11     Checkpoint5
你可以这样使用foverlaps。关键是复制df1中的距离列,以创建一个开始等于结束的人工间隔。然后,对于[Distance,Distance2=Distance]在df2的[Start,End]范围内的行,使用foverlaps连接df1和df2,并只保留最后一个匹配。

图书馆数据表 df1:运动员1 5 5 >2:运动员2 10 10 >3:运动员3 25 y必须输入foverlaps setkeydf2,开始,结束 使用type in和mult last,然后选择column foverlapsdf1,df2,by.x=cDistance,Distance2,mult=last,type=in[,.AthleteID,Distance,Score,CheckpointID] >AthleteID距离分数检查点ID >1:运动员1 5 2检查点1 >2:运动员2 10 6检查点3 >3:运动员3 25 10检查点5 删除df1中的临时列 df1[,距离2:=NULL]
您还可以使用新实现的非equi联接来实现它,这应该更简单

y[x, on = .(Start <= Distance, End >= Distance), mult = "last", 
    .(AthleteID, Distance, Score, CheckpointID)]

谢谢你的回复。在选择最佳答案并结束此问题之前,我做了一个小编辑,请查看!谢谢你的回复。在选择最佳答案并结束此问题之前,我做了一个小编辑,请查看!