Я пытаюсь создать функцию, чтобы выяснить, где какое-либо число совпадает между строками столбца в кадре данных:
Данные:
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 обрабатывает только строго увеличивающиеся столбцы, что не всегда так.