получить расположение строки с медианным значением в фрейме R

Когда это произошло со мной (из ниоткуда), я собирался погрузиться в верхний ответ выше, а затем решил, что закрою проект, закрою Visual Studio, а затем снова открою все. Задача решена. Ошибка VS?

0
задан Pablo Herreros Cantis 16 January 2019 в 16:50
поделиться

2 ответа

1110 Проблема немного недооценена.

  • Что должно произойти, когда медиана отсутствует в данных?
  • Что должно произойти, если медиана появляется в данных несколько раз?

Вот решение, которое принимает (абсолютную) разницу между каждым значением и медианой, а затем возвращает индекс первой строки , для которой этот вектор разности достигает своего минимума.

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

. Возможно, это может вернуть несколько номеров строк.

0
ответ дан IceCreamToucan 16 January 2019 в 16:50
поделиться

Здесь что-то вроде y$ColB[which(x$Col1 == round(median(x$Col1)))] сделало бы свое дело.

Проблема в том, что x имеет четное число строк, поэтому медиана 2.5 не является целым числом. В этом случае вы должны выбрать между 2 или 3.

Примечание. Вышеприведенное работает для вашего примера, а не для общих случаев (например, c(-2L,2L) или с рациональными числами). Для более общего случая см. Решение @ IceCreamToucan.

0
ответ дан niko 16 January 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: