Как найти ближайшее значение и вернуть значение другого столбца? - PullRequest
1 голос
/ 06 мая 2020
dfdf<-data.frame(a= c(80,90,100,110,120),
b= c(500,400,300,200,100))
index= 102

Как найти ближайшее к 102 значение в столбце a и вернуть значение той же строки в столбце b?

ожидаемый результат: 300

#attempt 1
index2<-min(abs(dfdf$a- index))
dfdf$b[dfdf$a- index==index2] # error sometimes positive values ​​and other times the value is negative

##output:
>numeric(0)

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Вы можете использовать findInterval, который возвращает индекс ближайшего значения;

dfdf[findInterval(102, dfdf$a),"b"]

 # [1] 300
0 голосов
/ 06 мая 2020

Или следуя тому, что вы уже пробовали:

dfdf$b[which.min(abs(index - dfdf$a))]
# [1] 300

В качестве примечания (не уверен, каким должен быть ваш результат, если есть два совпадения):

dfdf<-data.frame(a= c(80,90,105,105,120),
                 b= c(500,400,300,200,100))
index= 105


dfdf$b[which.min(abs(index - dfdf$a))]
# [1] 300

dfdf[findInterval(index, dfdf$a),"b"]
# [1] 200

Еще одно развлечение например:

dfdf<-data.frame(a= c(80,90,100,105,120),
                 b= c(500,400,300,200,100))
index= 95

dfdf$b[which.min(abs(index - dfdf$a))]
# [1] 400

dfdf[findInterval(index, dfdf$a),"b"]
# [1] 400
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...