r - 查找每行中特定列的最小差异,而不是 R 中的整个数据帧(或查找最接近的值)
问题描述
我有一个看起来像这样的df:
expected_1 expected_2 actual_1 actual_2 actual_3
1 NA 1.0000000 0.2197744 0.9981707 NA
2 NA 1.0000000 0.3267090 0.9925908 NA
3 NA 1.0000000 0.2754576 0.9951685 NA
4 NA 1.0000000 0.1034605 0.4849989 0.9927820
5 NA 1.0000000 0.4100000 0.9952586 NA
6 NA 1.0000000 0.3727756 0.9708294 NA
7 NA 1.0000000 0.2672000 0.6850000 0.9800000
8 NA 1.0000000 0.2503922 0.9916763 NA
9 NA 0.5000000 0.4609574 NA NA
10 0.3333333 0.6666667 0.3012779 0.6437114 NA
11 0.2500000 0.7500000 0.2980286 0.6383628 1.0000000
12 0.2000000 0.8000000 0.1831247 0.5060070 0.7086295
13 0.1428571 0.8571429 0.2914983 0.6599879 NA
14 NA 1.0000000 0.2934735 0.9923371 NA
对于expected_1 和expected_2,我想找到最接近它的实际值。为了首先找到每一行的最小差异,我尝试这样做:
df <- df %>% mutate(
min_dist_1 = min(abs(actual_1 - expected_1), abs(actual_2 - expected_1), abs(actual_3 - expected_1), na.rm = T),
min_dist_2 = min(abs(actual_1 - expected_2), abs(actual_2 - expected_2), abs(actual_3 - expected_2), na.rm = T),
)
但是,它只给出了整个 df 的最小值,而不是每一行的最小值。
expected_1 expected_2 actual_1 actual_2 actual_3 min_dist_1 min_dist_2
1 NA 1.0000000 0.2197744 0.9981707 NA 0.003124393 3.414614e-05
2 NA 1.0000000 0.3267090 0.9925908 NA 0.003124393 3.414614e-05
3 NA 1.0000000 0.2754576 0.9951685 NA 0.003124393 3.414614e-05
4 NA 1.0000000 0.1034605 0.4849989 0.9927820 0.003124393 3.414614e-05
5 NA 1.0000000 0.4100000 0.9952586 NA 0.003124393 3.414614e-05
6 NA 1.0000000 0.3727756 0.9708294 NA 0.003124393 3.414614e-05
如何找到每行的最小差异?
解决方案
您的方法的主要问题是您使用的min()
是未矢量化的函数。您应该使用pmin()
或pmap(min)
。
这将做你想要的,并且更简洁:首先使用mutate
across
所需的“实际”列来获取“差异”列。然后将这些列通过管道连接到pmap(min)
library(dplyr)
df %>% mutate('min_dist_1'=across(contains('actual'), ~abs(.x - expected_1)) %>% pmap(min, na.rm = TRUE),
'min_dist_2'=across(contains('actual'), ~abs(.x - expected_2)) %>% pmap(min, na.rm = TRUE))
推荐阅读
- jax-rs - 用于 CDI Bean 验证的 JAX-RS @Provider
- doxygen - 结构、类等的 doxygen 别名
- opengl - 延迟渲染中带有阴影贴图和贴花的视差映射
- python - 使用 pywinauto 自动化 wbemtest
- scala - 如果 M 是单子,如何将 List[M[List[A]]] 正确组合成 M[List[A]]?
- c# - 如何使用 Visual Studio 2017 或 Mage 发布实时和测试 (QA) 版本的 WPF 双部署
- sapui5 - 如何获取按下列表项的详细信息?
- javascript - 动态创建的数组总是充满变量
- flutter - 使容器小部件垂直填充父级
- android - 甚至无法创建最简单的安卓谷歌地图。未知错误