Когда это произошло со мной (из ниоткуда), я собирался погрузиться в верхний ответ выше, а затем решил, что закрою проект, закрою Visual Studio, а затем снова открою все. Задача решена. Ошибка VS?
Вот решение, которое принимает (абсолютную) разницу между каждым значением и медианой, а затем возвращает индекс первой строки , для которой этот вектор разности достигает своего минимума.
with(x, which.min(abs(Col1 - median(Col1))))
# [1] 2
Функция quantile
с type = 1
(т.е. без усреднения) также может представлять интерес, в зависимости от вашего желаемого поведения. Он возвращает нижнюю из двух «сторон» медианы, в то время как описанный выше метод which.min
может зависеть от порядка ваших данных.
quantile(x$Col1, .5, type = 1)
# 50%
# 2
Опцией, использующей quantile
, является
with(x, which(Col1 == quantile(Col1, .5, type = 1)))
# [1] 2
. Возможно, это может вернуть несколько номеров строк.
Здесь что-то вроде y$ColB[which(x$Col1 == round(median(x$Col1)))]
сделало бы свое дело.
Проблема в том, что x
имеет четное число строк, поэтому медиана 2.5
не является целым числом. В этом случае вы должны выбрать между 2
или 3
.
Примечание. Вышеприведенное работает для вашего примера, а не для общих случаев (например, c(-2L,2L)
или с рациональными числами). Для более общего случая см. Решение @ IceCreamToucan.