o 如何使用循环结构为每个唯一日期对数据帧进行子集化,并为每个唯一时间点应用过滤器

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

我是 R 新手,非常感谢对此项目的任何帮助。 我有一个数据框,其中包含多个日期的数据(2022 年 8 月 31 日和 2022 年 5 月 31 日)。

sample dataframe

我希望使用循环结构对每个唯一日期的数据帧进行子集化,并对每个数据子集应用多个过滤器。

我尝试创建一个由唯一日期组成的向量并将其命名为“evaluation_dates”。然后尝试创建一个循环结构来应用过滤器 micbb == "XNYS" 并通过 ff_mktcap 返回每个唯一日期子集的前 2 个。

最后,我想组合每个唯一日期的每个过滤器的结果,并将数据框称为“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

r for-loop vector filter subset
1个回答
0
投票

制作测试数据:

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.
© www.soinside.com 2019 - 2024. All rights reserved.