Получение минимального значения в dplyr - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу написать код в dplyr, где я могу принять минимальное значение из двух последовательных строк

A <- data.frame(
  y = c("A", "B", "C", "D", "E", "F"), 
  value = c(1, 2, 3, 4, 5, 6))
A
#   y value
# 1 A     1
# 2 B     2
# 3 C     3
# 4 D     4
# 5 E     5
# 6 F     6

Желаемый вывод

y value    
A 1    
C 3    
E 5

Я хочу использовать пакет dplyr

Общий код, который я использую для группировки по имени, был

z <- x %>%    
  group_by(name)%>%
  filter(value == min(value))

Я не могу думать о том, "как кодировать" последовательные строки "в R или dplyr

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Может немного отличаться tidyverse возможность:

A %>%
 group_by(grp = gl(length(value)/2, 2)) %>%
 filter(value == min(value))

  y     value grp  
  <fct> <dbl> <fct>
1 A        1. 1    
2 C        3. 2    
3 E        5. 3

Создает переменную группировки, используя gl(), группирует ее, а затем сохраняет минимальное значение.

Илииспользуя ту же логику, но создавая группы с помощью row_number():

A %>%
 group_by(grp = (row_number()-1) %/% 2) %>%
 filter(value == min(value)) 

Или используя top_n() вместо filter():

A %>%
 group_by(grp = gl(length(value)/2, 2)) %>%
 top_n(-1, wt = value)

Или:

A %>%
 group_by(grp = (row_number()-1) %/% 2) %>%
 top_n(-1, wt = value)
0 голосов
/ 01 февраля 2019

Вам просто нужно создать соответствующую группирующую переменную:

A %>% mutate(grp = rep(0:(n() - 1) %/% 2 ) %>%
  group_by(grp) %>%
  slice(which.min(x))
# # A tibble: 3 x 3
# # Groups:   grp [3]
#   y         x   grp
#   <fct> <dbl> <int>
# 1 A         1     1
# 2 C         3     2
# 3 E         5     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...