r - 根据开始日期和值的组合过滤某些 ID 变量
问题描述
structure(list(Stock = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L, 4L, 4L, 4L), .Label = c("AAA", "BBB", "CCC", "DDD"), class = "factor"),
Date = structure(c(17632, 17633, 17634, 17632, 17633, 17634,
17632, 17633, 17634, 17632, 17633, 17634), class = "Date"),
Price = c(5L, 6L, 7L, 10L, 9L, 9L, 6L, 6L, 6L, 10L, 30L,
50L), Market.Cap = c(1000L, 1300L, 1600L, 1600L, 1000L, 1000L,
600L, 600L, 600L, 400L, 1000L, 2000L)), .Names = c("Stock",
"Date", "Price", "Market.Cap"), row.names = c(NA, -12L), class = "data.frame")
我正在尝试根据特定日期的市值过滤此示例。例如,我正在尝试删除股票 BBB,因为它是唯一一个在 2018 年 4 月 11 日市值 > 1500 的股票。但是,如果市值增长超过 1500 点,比如 AAA 和 DDD,股票可以保留在数据框中。我尝试了 dplyr 但无法想出组合来做到这一点。
解决方案
您可以使用分组的filter
. 诀窍是要意识到分组过滤器实际上是分组的 mutate 然后是未分组的过滤器。要了解原因,请考虑最后给出相同结果的可比较代码。我们只需要查看每只股票any
的行中是否既有特定日期又有过高的市值。
df <- structure(list(Stock = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("AAA", "BBB", "CCC", "DDD"), class = "factor"), Date = structure(c(17632, 17633, 17634, 17632, 17633, 17634, 17632, 17633, 17634, 17632, 17633, 17634), class = "Date"), Price = c(5L, 6L, 7L, 10L, 9L, 9L, 6L, 6L, 6L, 10L, 30L, 50L), Market.Cap = c(1000L, 1300L, 1600L, 1600L, 1000L, 1000L, 600L, 600L, 600L, 400L, 1000L, 2000L)), .Names = c("Stock", "Date", "Price", "Market.Cap"), row.names = c(NA, -12L), class = "data.frame")
library(tidyverse)
df %>%
group_by(Stock) %>%
filter(!any(Market.Cap > 1500 & Date == as.Date("2018-04-11")))
#> # A tibble: 9 x 4
#> # Groups: Stock [3]
#> Stock Date Price Market.Cap
#> <fct> <date> <int> <int>
#> 1 AAA 2018-04-11 5 1000
#> 2 AAA 2018-04-12 6 1300
#> 3 AAA 2018-04-13 7 1600
#> 4 CCC 2018-04-11 6 600
#> 5 CCC 2018-04-12 6 600
#> 6 CCC 2018-04-13 6 600
#> 7 DDD 2018-04-11 10 400
#> 8 DDD 2018-04-12 30 1000
#> 9 DDD 2018-04-13 50 2000
df %>%
group_by(Stock) %>%
mutate(keep = !any(Market.Cap > 1500 & Date == as.Date("2018-04-11"))) %>%
filter(keep == TRUE)
由reprex 包(v0.2.0)于 2018 年 7 月 20 日创建。
推荐阅读
- actionscript-3 - Flash AS3 - 将多个对象拖放到多个目标
- c# - 如何正确地将我的 ContextMenu 命令绑定到 RelayCommand?
- javascript - 在 Jest 中使用 toBeCalledWith() 测试参数
- autohotkey - 使用自动热键激活组中最近活动的窗口
- python - __call__ 或 __init__ 在这里调用?不要不明白哪个和为什么
- amazon-web-services - s3 存储桶策略,例如从两个不同的帐户读取
- html - 每次我尝试触发更改事件时在 ie11 中接收脚本 70 错误
- python - python3元类的调用顺序
- python - 通过在每个索引处随机选取元素来合并 N 个列表
- excel - Excel 条件格式公式和范围 (VBA)