如何在R数据帧的每个类别中提取最接近某个值的值?

在数据分析中,我们经常处理值的比较,并且在找到最接近某个值(可能是阈值)的最接近值之后也可以进行此比较。为此,我们可以将dplyr包的过滤器函数与abs和min函数一起使用,需要abs和min函数来创建用于查找最接近值的公式。

考虑以下数据帧-

示例

Category<-sample(LETTERS[1:3],20,replace=TRUE)
Y<-rpois(20,2)
df1<-data.frame(Category,Y)
df1
输出结果
  Category Y
1  C       2
2  B       1
3  C       1
4  B       3
5  B       0
6  C       1
7  C       3
8  A       3
9  B       3
10 C       1
11 A       0
12 B       2
13 A       2
14 B       3
15 B       0
16 B       5
17 B       4
18 C       4
19 B       2
20 A       0

加载dplyr软件包,并在每个类别的Y列中找到最接近5的值-

示例

library(dplyr)
df1%>%group_by(Category)%>%filter(abs(Y-5)==min(abs(Y-5)))
# A tibble: 3 x 2
# Groups: Category [3]
输出结果
Category Y
<chr> <int>
1 A   3
2 B   5
3 C   4

示例

Class<-sample(c("I","II","III"),20,replace=TRUE)
Y<-rnorm(20)
df2<-data.frame(Class,Y)
df2
输出结果
  Class     Y
1  III     0.8489651
2  I       0.1588493
3  II     -0.4598459
4  I       0.5460653
5  I      -1.2462101
6  II     -1.1553006
7  III     0.1208797
8  I      -0.8272769
9  III    -0.1296539
10 III     0.4404777
11 I      -1.4512669
12 I      -0.1486225
13 II      0.8484109
14 II      0.9099450
15 I       0.6118836
16 III    -1.5100937
17 II     -2.0682287
18 III     0.1454986
19 III    -1.9322351
20 I       0.8039917

在每个类的Y列中找到最接近0.2的值-

示例

df2%>%group_by(Class)%>%filter(abs(Y-0.2)==min(abs(Y-0.2)))
# A tibble: 3 x 2
# Groups: Class [3]
输出结果
Class Y
<chr>    <dbl>
1 I      0.159
2 II     0.848
3 III    0.145