Сохранение разных конкретных чисел повторяющихся строк на основе двух столбцов - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть такой фрейм данных: enter image description here

Я хочу извлечь строки на основе Shape_Area и number_of_clusters.

Для ID_12: 9 number_of_clusters равно 1. Итак, строка с ID_12==9, имеющая наибольшее значение Shape_Area, должна быть нарезана. Для ID_12: 73 есть 4 кластера, но 5 наблюдений. Таким образом, в результирующем фрейме данных будут 4 самых больших наблюдения на основе Shape_Area.

Я пробовал это, но, похоже, он не работает должным образом:

Map(function(x,y) 
  filter(mb_with_profile_f, ID_12 == x) %>%
    group_by(ID) %>%
    top_n(y, wt = Shape_Area), sort(unique(mb_with_profile$ID_12)),number_of_clusters) %>%
  bind_rows()

1 Ответ

0 голосов
/ 07 ноября 2019
df %>% group_by(ID_12) %>% 
  # sort by area in decreasing order for each ID_12
  arrange(desc(Shape_Area), .by_group=TRUE) %>% 
  # create a new column called rank that stores the row number
  # since we sorted in decreasing order by area, for each group, the row with largest area will have rank=1, and so on
  mutate(rank = row_number()) %>%
  # only take rows that have rank <= number_of_clusters
  filter(rank <= number_of_clusters) %>%
  # only select columns in the original dataframe
  select(names(df))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...