ломтик (which.max ()) с условием - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующий набор данных:

ID, diff

1  -40

1  -21

1  -5

1  1

1  6

1  7

...

Переменная ID имеет значения 1,2,3,4,5, ... в то время как diff является числовой переменной c. Теперь из набора данных для каждого идентификатора я хочу извлечь строку с разницей, ближайшей к нулю И отрицательной. Итак, я хочу строку с наибольшим отрицательным значением diff. В приведенном выше наборе данных для идентификатора 1 я хочу извлечь 3 строки со значениями (1 -5).

Следующий код может извлечь строки, абсолютное значение которых ближе всего к 0:

library(dplyr)

dataset22 = dataset1 %>%  group_by(ID) %>% slice(which.min(abs(diff)))

Как извлечь строку с отрицательным числом, ближайшим к нулю?

Заранее спасибо!

1 Ответ

0 голосов
/ 20 февраля 2020

Это работает:

library(dplyr)

df <- data.frame(ID = c(1, 1, 1, 1, 1, 1),
                 diff = c(-40, -21, -5, 1, 6, 7))

df %>% 
  group_by(ID) %>% 
  filter(diff < 0) %>%
  summarise(min_negative_diff = max(diff))

#> # A tibble: 1 x 2
#>      ID min_negative_diff
#>   <dbl>             <dbl>
#> 1     1                -5
...