R语言 o如何使用循环结构为每个唯一的日期子集一个子框架,并为每个唯一的时间点应用过滤器

k4emjkb1  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(80)

我是R的新手,希望对这个项目有所帮助。我有一个包含多个日期(2022年8月31日和2022年5月31日)的数据的数据框。
sample dataframe
我希望使用一个循环结构来为每个唯一的日期划分 Dataframe 的子集,并为每个数据子集应用多个过滤器。
我尝试创建一个唯一日期向量,并将其命名为“evaluation_dates”。然后尝试创建一个循环结构来应用过滤器micbb ==“XNYS”,并为每个唯一的日期子集返回top 2 by ff_mktcap。
最后,我想合并每个过滤器对每个唯一日期的结果,并将数据框称为“combined_screens”。
下面是我试过的代码,没有用。

#Vector of unique dates in df
evaluation_dates <- unique(df$marketdate)                 

a <- list(evaluation_dates)

for(i in 1:length(evaluation_dates)){

filter(df, micbb == "XNYS")
top_n(df, 2, ff_mktcap)

a[[i]] <-
}  
  combined_screens <- do.call(rbind,a)

最终,组合屏幕输出应返回:
Combined screen output

06odsfpq

06odsfpq1#

制作测试数据:

testdf <- data.frame(marketdate = rep(c("31/8/2022","31/5/2022"), each = 5),
                     sedol = letters[1:10],
                     isin = LETTERS[1:10],
                     tickerbb = letters[11:20],
                     micbb = c("OOTC",
                               rep("XNYS",3),
                               rep("XNGS",2),
                               rep("XNYS",2),
                               "OOTC",
                               "XNYS"),
                     ff_mktcap = runif(10,3700,12000))

执行分组、过滤、切片:

library(dplyr)

testdf |>
  group_by(marketdate) |>
  filter(micbb == "XNYS") |>
  slice_max(ff_mktcap, n=2) |>
  ungroup()

给出:

# A tibble: 4 × 6
  marketdate sedol isin  tickerbb micbb ff_mktcap
  <chr>      <chr> <chr> <chr>    <chr>     <dbl>
1 31/5/2022  h     H     r        XNYS      8768.
2 31/5/2022  g     G     q        XNYS      7531.
3 31/8/2022  d     D     n        XNYS      8820.
4 31/8/2022  c     C     m        XNYS      8714.

相关问题