我有一个大型的timeseries,并且希望从每个日期中选择前10个观察值,其中一个是我的列中的值。
我可以使用group_by(Date) %>% top_n(10)来完成这个任务。
但是,如果第10次和第11次观测的值相等,那么它们都会被选中,所以我得到了11次观测,而不是10次。
有人知道我能做些什么来确保只选择10个观察结果吗?
发布于 2020-05-02 11:24:29
您可以对数据进行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)发布于 2020-05-02 11:27:26
有了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]发布于 2020-05-02 19:43:02
我们可以使用base R
df1 <- df[with(df, order(Date, -value)),]
df1[with(df1, ave(seq_along(Date), Date, FUN = function(x) x %in% 1:10)),]https://stackoverflow.com/questions/61558525
复制相似问题