我有一个大型的时间序列数据集,想根据其中一列的数值从每个日期中选择前10个观测值。
我可以使用 group_by(Date) %>% top_n(10)
但是,如果第10个和第11个观测值相同,那么它们都被选中,这样我得到11个观测值,而不是10个。
有谁知道我可以做什么来确保只选择10个观测值?
你可以 arrange
数据,并选择每组中的前10行。
library(dplyr)
df %>% arrange(Date, desc(col_name)) %>% group_by(Date) %>% slice(1:10)
同样,对于 filter
df %>%
arrange(Date, desc(col_name)) %>%
group_by(Date) %>%
filter(row_number() <= 10)
随着 data.table
你可以
library(data.table)
setDT(df)
df[order(Date, desc(value))][, .SD[1:10], by = Date]
变化 value
来匹配用于选择在出现平局时应该保留哪个观测值的变量名称。你也可以这样做。
df[order(Date, desc(value))][, head(.SD,10), by = Date]
我们可以使用 base R
df1 <- df[with(df, order(Date, -value)),]
df1[with(df1, ave(seq_along(Date), Date, FUN = function(x) x %in% 1:10)),]