我是 R 新手,非常感谢对此项目的任何帮助。 我有一个数据框,其中包含多个日期的数据(2022 年 8 月 31 日和 2022 年 5 月 31 日)。
我希望使用循环结构对每个唯一日期的数据帧进行子集化,并对每个数据子集应用多个过滤器。
我尝试创建一个由唯一日期组成的向量并将其命名为“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)
最终组合屏幕输出应该返回:-
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.