Как найти ближайшую строку во фрейме данных к моему фрагменту строки в R?

У меня есть фрейм данных Iris и мой набор значений my_row

structure(list(Sepal.Length = 4.65, Sepal.Width = 3.19, Petal.Length = 1.44, 
    Petal.Width = 0.3, Species = structure(1L, .Label = c("setosa", 
    "versicolor", "virginica"), class = "factor")), row.names = 1L, class = "data.frame")

> my_row
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1         4.65        3.19         1.44         0.3  setosa

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Как найти ближайшую строку в фрейме данных Iris к my_row?

Есть ли у вас порог для ближайшего

akrun 10.04.2022 21:06

у меня нет порогов

drastega 10.04.2022 21:07

Есть ли у вас какие-либо критерии для определения «ближайшего»? Являются ли некоторые столбцы более важными, чем другие? Будет ли иметь значение, если ваша целевая строка точно соответствует числовым столбцам другой строки, но относится к другому виду?

jdobres 10.04.2022 21:09

Все столбцы имеют одинаковую важность

drastega 10.04.2022 21:11
Получение данных из формы с помощью JavaScript - краткое руководство
Получение данных из формы с помощью JavaScript - краткое руководство
Получить данные из формы с помощью JS очень просто: вы запрашиваете элемент формы, передаете его конструктору new FormData() и, наконец, получаете...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
1
4
9
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Воспользуйтесь filter для строки «iris», где «Species» совпадают с «Species» из «my_row», затем получите abs - разницу между соответствующими числовыми столбцами обоих наборов данных, и получите rowSums - разницу и slice - строку с минимальным значением в новом столбце:

library(dplyr) 
iris %>% 
   filter(Species == my_row$Species) %>% 
    mutate(new = rowSums(across(where(is.numeric), 
    ~ abs(.x - my_row[[cur_column()]])))) %>% 
    slice_min(n = 1, order_by = new) 

Результат:

 Sepal.Length Sepal.Width Petal.Length Petal.Width Species new 
1          4.6         3.2          1.4         0.2  setosa 0.2

Другие вопросы по теме