如何在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