我想用dplyr写一个代码,我可以取最小值2 连续的行
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中编码“连续行”
答案 0 :(得分:3)
您只需要创建一个适当的分组变量:
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
答案 1 :(得分:2)
一个稍微不同的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)