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


在数据分析中,我们经常处理数值的比较,这种比较也可以在找到可能为阈值的某个值的最近数值后进行。为此,我们可以使用 dplyr 包的 filter 函数以及 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

更新于: 2021年2月10日

1K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告