计算R中类似情况(观测值)的最小距离

计算R中类似情况(观测值)的最小距离,r,R,我有一个数据集,它描述了将3种算法应用于多个案例的结果。对于算法和案例的每个组合,都有一个结果 然而,当我想在整个数据集中计算一个新列时,我会得到案例2的虚假结果 df$gap <- gap(df$case, df$result) df 现在看来,GAP函数对整个数据文件的最小结果起作用,而它应该只考虑具有相同情况的行。可能间隙函数中的子集筛选工作不正常?使用ave获得每组的最小值,并从结果中减去 df$result - ave(df$result, df$case, FUN = min

我有一个数据集,它描述了将3种算法应用于多个案例的结果。对于算法和案例的每个组合,都有一个结果

然而,当我想在整个数据集中计算一个新列时,我会得到案例2的虚假结果

df$gap <- gap(df$case, df$result)
df

现在看来,GAP函数对整个数据文件的最小结果起作用,而它应该只考虑具有相同情况的行。可能间隙函数中的子集筛选工作不正常?

使用
ave
获得每组的最小值,并从
结果中减去

df$result - ave(df$result, df$case, FUN = min)
#[1] 0 1 2 2 3 0

我们可以使用
dplyr

library(dplyr)
df %>%
  group_by(case) %>% 
  mutate(result = result - min(result))
# A tibble: 6 x 3
# Groups:   case [2]
#    case algorithm result
#   <fctr>    <fctr>  <dbl>
#1  case1     algo1      0
#2  case1     algo2      1
#3  case1     algo3      2
#4  case2     algo1      2
#5  case2     algo2      3
#6  case2     algo3      0
库(dplyr)
df%>%
组别(个案)%>%
变异(结果=结果-最小值(结果))
#一个tibble:6x3
#分组:案例[2]
#case算法结果
#         
#1宗个案1宗10宗
#2案例1算法2 1
#3案例1算法3 2
#4案例2算法1 2
#5案例2算法2 3
#6案例2算法3 0

这个也可以。要添加我想要的列“gap”,需要使用
df$gap
df$gap <- gap(df$case, df$result)
df
   case algorithm result gap
1 case1     algo1     10   0
2 case1     algo2     11   1
3 case1     algo3     12   2
4 case2     algo1     22  12
5 case2     algo2     23  13
6 case2     algo3     20  10
df$result - ave(df$result, df$case, FUN = min)
#[1] 0 1 2 2 3 0
library(dplyr)
df %>%
  group_by(case) %>% 
  mutate(result = result - min(result))
# A tibble: 6 x 3
# Groups:   case [2]
#    case algorithm result
#   <fctr>    <fctr>  <dbl>
#1  case1     algo1      0
#2  case1     algo2      1
#3  case1     algo3      2
#4  case2     algo1      2
#5  case2     algo2      3
#6  case2     algo3      0