r - 如果每季度某一天数的行 = 0,则删除所有行
问题描述
首先,感谢您抽出宝贵时间查看/回答我的问题。
我在这个问题上有点卡住了——我相信我已经很接近了,但无法找到我想要的解决方案。我有相当多的股票数据,请参见下面的示例。
id date qtr price volume
1 2/8/12 2012 Q1 101 0
1 2/9/12 2012 Q1 101.1 105
1 2/17/12 2012 Q1 102.1 0
1 3/13/12 2012 Q1 104.1 0
1 5/12/12 2012 Q2 99.1 0
1 5/14/12 2012 Q2 101.1 24
2 2/12/12 2012 Q1 4 0
2 2/15/12 2012 Q1 4 0
2 3/19/12 2012 Q1 4.5 102
2 5/12/12 2012 Q2 6.5 291
2 5/13/12 2012 Q2 6.54 45
本质上,我想 group_by(qtr, id),如果证券交易量为 0超过 3 天- 我想从该季度的 DF 中删除它。
我假设公式看起来像这样:
df %>% group_by(qtr, id) %>% filter(.....)
我看过其他类似的问题,但是,他们中的大多数都使用rowSums
,但不确定在这种情况下如何适用。
非常感谢!
解决方案
我们可以rle
在filter
'qtr'、'id' 中连续使用 3 天或更长时间
library(dplyr)
df %>%
group_by(qtr, id) %>%
filter(with(rle(volume == 0), !any(lengths[values] >= 3)))
注意:使用上面的例子,它会给出完整的数据集,因为条件不满足
在这里,我们假设了连续的“音量”。如果不是这种情况,即每组任意 3 天,则类似于@RyanD 的一个选项base R
是
df[with(df, ave(volume == 0, id, qtr, FUN = sum) <=3),]
推荐阅读
- elasticsearch - Elasticsearch 子映射
- angularjs - 如何结合 AngularJS ng-show 使用 HTML5 视频自动播放?
- java - 选择同一行中的另一个单元格时,cellSelectionModel 未获取信息
- codenameone - SideMenu 和选项卡屏幕问题
- python - 如何多次运行完整的 DAG 而不是重复运行每个任务
- node.js - Mongoose 架构路径的值无效
- reactjs - 如何使用 i18n 到 gatsby?
- c# - MVVM 在 Execute Command 中一次执行所有代码
- exception - VM Exception while processing transaction: Gas 估计错误
- azure-active-directory - 使用 Azure Active Directory 自动将用户预配和取消预配到 SaaS 应用程序