Найти, к какой строке принадлежит какое-то число - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать функцию, чтобы выяснить, где какое-либо число совпадает между строками столбца в кадре данных:

Данные:

df = data.frame("one"=c(1,2,3,4,5,6,7),"two"=c(8,9,10,11,12,13,14))

Попытка:

fun_match_one <- function(value_to_match, data) {

  if(value_to_match<data$one[1]) {row=1}
  else {

    row=which((value_to_match>=data$one) == (value_to_match<c(tail(data$one,-1),Inf)))
  }
  return(row)

}

Так, например, value_to_match = 6,5 идет между 6 и 7, таким образом, мы получаем совпадение строки, в которой находится 6.Я просто нахожу свое решение таким уродливым, и надеюсь, что кто-нибудь может помочь сделать это более изящным Р.

РЕДАКТИРОВАТЬ : не использовать второй столбец df для чего-либо в данный момент.

EDIT2 : ожидаемый результат, если значение value_to_match меньше минимального значения столбца, является наименьшим значением столбца и аналогично максимальному значению столбца, если значение value_to_match больше значениячем выше значение столбца.Как вы видите, я интегрировал это в свое решение, но я ищу более элегантное решение.Функция findInterval в R обрабатывает только строго увеличивающиеся столбцы, что не всегда так.

1 Ответ

1 голос
/ 04 июня 2019

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

fun_match <- function(data, value_to_match,col) {
    max(tail(which(value_to_match >= data[col]), 1), 1)
}

fun_match(df, 6.5, "one")
#[1] 6

fun_match(df, 12.2, "two")
#[1] 5

fun_match(df, 2.5, "one")
#[1] 2

Сравнивая ее с fun_match_one

fun_match_one(-21, df)
#[1] 1
fun_match(df, -21, "one")
#[1] 1

fun_match_one(21, df)
#[1] 7
fun_match(df, 21, "one")
#[1] 7

fun_match_one(2.5, df)
#[1] 2
fun_match(df, 2.5, "one")
#[1] 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...