slice()
может делать две вещи: сохранять строки, если вы даете ему положительные номера строк, или отбрасывать строки, если вы даете ему отрицательные номера строк.Вы можете использовать любой из них, чтобы получить вторую половину вашего фрейма данных:
# Keeping later rows
df %>% slice(seq(n()/2, n()))
# Dropping earlier rows
df %>% slice(-seq(1, n()/2))
Вы должны быть осторожны, если у вас нечетное количество строк, так как n()/2
не будет целым числомв тех случаях.Использование seq(0.5 * n())
, как в вашем примере, также может столкнуться с этой проблемой.Чтобы быть в безопасности, вы можете четко указать, как обрабатывать средние регистры с помощью floor()
и ceiling()
:
df <- data.frame(x = 1:11)
# Include row 5
df %>% slice(seq(floor(n()/2), n()))
# Exclude row 5
df %>% slice(seq(ceiling(n()/2), n()))