例如,我有這個資料框:
| ID | 高度 | 價錢 |
|---|---|---|
| 1 | 10 | 12 |
| 2 | 13 | 7 |
| 3 | 4 | 33 |
| 4 | 10 | 15 |
| 5 | 8 | 49 |
| 6 | 4 | 2 |
| 7 | 5 | 11 |
我有自己的價值觀
height = 11
price = 14
我想找到 ID 為 4 的行,因為它的高度和價格最接近我自己的值。我應該如何在 R 中實作這一點?我一直在嘗試一些 dplyr 功能,但到目前為止沒有運氣。
uj5u.com熱心網友回復:
假設您想使用歐幾里得距離(我使用平方距離,因為它只是為了排序),這是一種快速的方法。
df |>
mutate(dist = (11 - height)^2 (14 - price) ^2) |>
filter(dist == min(dist))
##> ID height price dist
##> 1 4 10 15 2
uj5u.com熱心網友回復:
另一種可能的解決方案:
library(tidyverse)
h = 11
p = 14
df <- data.frame(
ID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L),
height = c(10L, 13L, 4L, 10L, 8L, 4L, 5L),
price = c(12L, 7L, 33L, 15L, 49L, 2L, 11L)
)
df %>%
mutate(dist = sqrt((height-h)^2 (price-p)^2)) %>%
slice_min(dist) %>%
select(ID)
#> ID
#> 1 4
uj5u.com熱心網友回復:
此函式選擇從資料到給定點的第一個最小歐幾里得距離。
dat <- read.table(text = "
ID height price
1 10 12
2 13 7
3 4 33
4 10 15
5 8 49
6 4 2
7 5 11
", header = TRUE)
choice <- function(x, height, price){
d <- function(x, y) sqrt(sum((x - y)^2))
y <- apply(x[-1], 1, d, y = c(height, price))
which.min(y)
}
choice(dat, 11, 14)
#> [1] 4
由reprex 包于 2022-03-23 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447933.html
上一篇:相關矩陣改進列印視圖去除重復
下一篇:分組并按熊貓中的最大值過濾
