Использование tidyr top_n для выбора по переменной и включения NA - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь использовать dplyr для группировки по переменной и определения ближайшего местоположения для каждого места в моем наборе данных.Я также хотел бы включить все строки, для которых расстояние не было измерено (NA).

# Set up df of place, distance, and destination.
df <- data.frame(place = c('A','B','B','C','C','D','D'),dist = c(NA, 4, 1, 6, 3, 1, 1), dest = 1:7)

# For each place, get the nearest destination. 
df %>% 
  group_by(place) %>%
  top_n(1, desc(dist))

# This does not return a row for place A. 

Существует ли решение для тидира для использования top_n для идентификации строк на основе ранга, которое также будет включать строки, которые не были ранжированы?Заранее спасибо.

1 Ответ

0 голосов
/ 11 июня 2019

Это работает, но, возможно, есть более эффективные решения.

coalesce(dist, max(dist), ...) есть, потому что мы приоритезируем ненулевые значения.Затем мы хотим убедиться, что случайное значение не заканчивается в top_n, поэтому мы берем max(dist) группы.Затем, наконец, чтобы на самом деле вернуть значение, я ввел число - вы можете использовать любое число.

Если бы вы делали не-desc, вы, вероятно, использовали бы min(dist) вместо max(dist).

df %>% 
  group_by(place) %>%
  top_n(1, desc(coalesce(dist, max(dist)+1, 0)))

  place  dist  dest
  <fct> <dbl> <int>
1 A        NA     1
2 B         1     3
3 C         3     5
4 D         1     6
5 D         1     7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...