Условно фильтровать элементы группы по максимальному значению другого столбца (dplyr :: group_by) - PullRequest
0 голосов
/ 14 января 2020
df <- read.csv("http://www.sharecsv.com/dl/da89d0f973c81ad8c0ff4bcb0e7293b0/testdata.csv")
df %>% dplyr::group_by(TOF)

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

intFT > max(intFT) * 0.1 ### this condition is valid within-group, i.e. max(intFT) refers to the highest intFT in a certain TOF group grouped by dplyr::group_by

Кроме того, в каждом TOF группа, должны быть сохранены только три верхних элемента с самым высоким intFT.

NA значения должны не быть удалены.

Это возвращает неверное решение:

df %>% dplyr::group_by(TOF) %>% filter(intFT > max(intFT) * 0.1)

1 Ответ

0 голосов
/ 14 января 2020

У меня нет ваших данных, но что-то подобное может работать

df %>%
  dplyr::group_by(TOF) %>% 
  add_tally %>% 
  mutate(remove_it = if_else(n > 2 | intFT < max(intFT) * 0.1),"yes","no") %>% 
  filter(remove_it == "no") %>% 
  top_n(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...