作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个数据框:
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
请问这里有什么问题吗?
我得到的错误是:
Error in order(order_by)[[n]] : subscript out of bounds
最佳答案
因为这是一个基于dplyr
的具体问题
1) 在group_by
之后,在row_number()
上使用slice
library(tidyverse)
df %>%
group_by(a) %>%
slice(tail(row_number(), 2))
# A tibble: 8 x 2
# Groups: a [4]
# a b
# <dbl> <dbl>
#1 1 343
#2 1 54
#3 2 55
#4 2 62
#5 3 59
#6 3 -9
#7 4 0
#8 4 -0.5
<小时/>
2) 或使用 dplyr
中的filter
df %>%
group_by(a) %>%
filter(row_number() >= (n() - 1))
<小时/>
3) 或与 do
和 tail
df %>%
group_by(a) %>%
do(tail(., 2))
<小时/>
4)除了tidyverse
方法之外,我们还可以使用紧凑的data.table
library(data.table)
setDT(df)[df[, .I[tail(seq_len(.N), 2)], a]$V1]
<小时/>
5) 或来自 base R
的 by
by(df, df$a, FUN = tail, 2)
6) 或使用来自 base R
的 aggregate
df[aggregate(c ~ a, transform(df, c = seq_len(nrow(df))), FUN = tail, 2)$c,]
7) 或使用来自 base R
的 split
do.call(rbind, lapply(split(df, df$a), tail, 2))
关于r - 如何从 dplyr 数据框中的每组中选择最后 N 个观察值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53994497/
我是一名优秀的程序员,十分优秀!