如何在 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+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告