【发布时间】:2016-05-25 09:31:53
【问题描述】:
我正在尝试使用 R 复制 Fama French 1993 论文。我需要进行以下排序:
- 每个月,
- 仅计算 NYSE 股票的 ME 十分位断点
- 将所有股票按 2 中创建的十分位数排序。
数据生成:
set.seed(1234)
n = 120
stocks <- c("A", "B", "C", "D", "E")
exchange <- c("NYSE", "NASDAQ", "AMEX")
df <- as.data.frame(cbind(Month = 1:12,
exchangeCode = exchange[round(runif(n, 1, 3))],
Stock = stocks[round(runif(n, 1, 5))],
ME=floor(100*abs(rnorm(n)))))
期望的输出:
ME_NYSE_vals <- as.numeric(paste(df[df$Month==1 & df$exchangeCode=="NYSE","ME"]))
ME_ALL_vals <- as.numeric(paste(df[df$Month==1,"ME"]))
cut(x = ME_ALL_vals,
breaks = c(-Inf,quantile(ME_NYSE_vals,probs=seq(.1,.9,.1)),+Inf),
labels = 1:10
)
应根据 ME_NSYE_vals 计算休息时间。削减应适用于每个月的所有 ME_ALL_vals。
【问题讨论】:
-
添加
set.seed,减少数据集并添加您想要的输出。 -
如果你只希望 NYSE 在结果数据中,你可以在 group_by 之前过滤:
df %>% filter(exchangeCode == "NYSE") %>% group_by(Month) %>% mutate(nTile = ntile(ME, 10)) -
感谢您的评论。我已更新问题以更好地反映正在寻求的内容。
标签: r sorting data.table dplyr percentile