在R中选择前n个变量,当匹配值。

问题描述 投票:0回答:1

我有一个大型的时间序列数据集,想根据其中一列的数值从每个日期中选择前10个观测值。

我可以使用 group_by(Date) %>% top_n(10)

但是,如果第10个和第11个观测值相同,那么它们都被选中,这样我得到11个观测值,而不是10个。

有谁知道我可以做什么来确保只选择10个观测值?

r dplyr subset
1个回答
1
投票

你可以 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)

0
投票

随着 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]

0
投票

我们可以使用 base R

df1 <- df[with(df, order(Date, -value)),]
df1[with(df1, ave(seq_along(Date), Date, FUN = function(x) x %in% 1:10)),]
© www.soinside.com 2019 - 2024. All rights reserved.