如何在 R 数据框中找到与最近值相对应的行?

r programmingserver side programmingprogramming更新于 2025/4/9 18:37:17

要找到与 R 数据框中的最近值相对应的行,我们可以在获得值与列之间的绝对差以及用于对行进行子集设置的单个方括号后使用 which.min 函数。

要了解其工作原理,请查看下面给出的示例。

示例 1

以下代码片段创建了一个示例数据框 −

ID<-1:20
Score<-sample(50:100,20)
df1<-data.frame(ID,Score)
df1

输出

创建以下数据框 −

  ID  Score
1  1   85
2  2   91
3  3   73
4  4   77
5  5   98
6  6   53
7  7   59
8  8   74
9  9   88
10 10  84
11 11  82
12 12  94
13 13  56
14 14  76
15 15  89
16 16  71
17 17  52
18 18  64
19 19  69
20 20  63

要查找 df1 中与最接近的 100 对应的行,请将以下代码添加到上面的代码片段中 −

ID<-1:20
Score<-sample(50:100,20)
df1<-data.frame(ID,Score)
df1[which.min(abs(100-df1$Score)),]

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

  ID Score
5 5  98

示例 2

以下代码片段创建了一个示例数据框 −

Emp_ID<-sample(111111:999999,20)
Sal<-sample(20000:50000,20)
df2<-data.frame(Emp_ID,Sal)
df2

输出

创建以下数据框 −

   Emp_ID    Sal
1  234742   38090
2  584335   43409
3  850592   43036
4  841349   30627
5  628123   32998
6  297438   45053
7  635135   21746
8  866226   40546
9  457493   26573
10 779219   41954
11 933665   46539
12 162673   35816
13 608379   41035
14 256672   49987
15 605809   32840
16 996414   36487
17 910392   33479
18 964044   25177
19 934603   33697
20 171843   37909

要在 df2 中找到与最接近的 30000 相对应的行,请将以下代码添加到上面的代码片段中 −

Emp_ID<-sample(111111:999999,20)
Sal<-sample(20000:50000,20)
df2<-data.frame(Emp_ID,Sal)
df2[which.min(abs(30000-df2$Sal)),]

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

   Emp_ID  Sal
4  841349  30627

相关文章