首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配值时选择R中的头n个变量

匹配值时选择R中的头n个变量
EN

Stack Overflow用户
提问于 2020-05-02 11:20:53
回答 3查看 95关注 0票数 0

我有一个大型的timeseries,并且希望从每个日期中选择前10个观察值,其中一个是我的列中的值。

我可以使用group_by(Date) %>% top_n(10)来完成这个任务。

但是,如果第10次和第11次观测的值相等,那么它们都会被选中,所以我得到了11次观测,而不是10次。

有人知道我能做些什么来确保只选择10个观察结果吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-02 11:24:29

您可以对数据进行arrange,并在每个组中选择前10行。

代码语言:javascript
复制
library(dplyr)
df %>% arrange(Date, desc(col_name)) %>% group_by(Date) %>% slice(1:10)

类似地,对于filter

代码语言:javascript
复制
df %>% 
 arrange(Date, desc(col_name)) %>% 
 group_by(Date) %>% 
 filter(row_number() <= 10)
票数 1
EN

Stack Overflow用户

发布于 2020-05-02 11:27:26

有了data.table你就能做到

代码语言:javascript
复制
library(data.table)
setDT(df)
df[order(Date, desc(value))][, .SD[1:10], by = Date]

更改value以匹配用于选择在发生关系时应保留哪个观察的变量名称。你也可以:

代码语言:javascript
复制
df[order(Date, desc(value))][, head(.SD,10), by = Date]
票数 0
EN

Stack Overflow用户

发布于 2020-05-02 19:43:02

我们可以使用base R

代码语言:javascript
复制
df1 <- df[with(df, order(Date, -value)),]
df1[with(df1, ave(seq_along(Date), Date, FUN = function(x) x %in% 1:10)),]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61558525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档