r语言 - 切片每个组的最后和最后2行



假设我有一个数据集,想要在分组中选择第3行和第5行:

df <- data.table(
x = c(1, 2, 3, 4, 5),
d = c("2022-05-01", "2022-05-02", "2022-05-03", "2022-05-04", "2022-05-05"))

我只需要使用slice()row_number()"3"one_answers"5";行。

df %>% 
group_by(d) %>% 
arrange(d) %>%
slice(tail(row_number()-2, row_number())) %>%
ungroup()

像这样?它应该与group_by()一起工作

library(dplyr)
df %>% 
slice(n()-2, n())

使用数据。表可能是一个更好的示例数据,试试这个:

library(data.table)
# example data
x <- mtcars[mtcars$cyl %in% c(4, 6), c("cyl", "mpg")]
setDT(x)
# order by mpg and get Nth and Nth-2 rows per cyl
x[order(mpg), .SD[ { ind = (.N - c(2, 0)); ind[ind > 0]; }, ], by = cyl ]
#    cyl  mpg
# 1:   6 21.0
# 2:   6 21.4
# 3:   4 30.4
# 4:   4 33.9