给定 Dataframe :
df <- structure(list(a = c(1, 1, 1, 2, 2, 2, 3, 3, 4, 4), b = c(34,
343, 54, 11, 55, 62, 59, -9, 0, -0.5)), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame"))
我想从每组中获取最后N个观察值/行:
df %>%
dplyr::group_by(a) %>%
dplyr::last(2)
给我错误的结果。
我希望它是:
a b
1 343
1 54
2 55
2 62
3 59
3 -9
4 0
4 -0.5
请告诉我这里出了什么问题?
我得到的错误是:
订单(order_by)n中出错:下标越界
5条答案
按热度按时间wh6knrhe1#
因为这是基于
dplyr
的特定问题1)在
group_by
之后,在row_number()
上使用slice
2)或使用
dplyr
中的filter
3)或使用
do
和tail
4)除了
tidyverse
方法外,我们还可以使用compactdata.table
5)或
base R
中的by
6)或使用
base R
中的aggregate
7)或从
base R
到split
3ks5zfa02#
更新
dplyr 1.1.0将
by
参数引入到slice()
系列动词中,以允许一次性分组操作:注:此时
by
是实验性的。dplyr 1.0.0引入了
slice_tail
,使这变得简单:类似地,
slice_head
用于获取 * 前 *n
行。ds97pgxw3#
使用
tapply
的基本R选项是为每个组的最后两行设置子集。或使用
ave
的其他选项1szpjjfi4#
还有
tidyverse
的可能性:根据每组的行号,取前两行。
jk9hmnmh5#
尝试
tail()
。在R中,head
函数允许您预览前n行,而tail
允许您预览后n行。