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


为了找到与 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

更新于:2021年11月3日

4K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告