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