r - 如何计算某个变量的每个观察值的负值数量
问题描述
我想使用前 10 个观察值计算每个观察值的负值总数。我使用了以下代码,但它不起作用 -
funda_addit <- funda_addit %>%
group_by(TICKER) %>%
arrange(year) %>%
mutate(NEG_EARN = rollapply(ni, 10, sum (ni<0), partial=TRUE)) %>%
ungroup()
实际上,我想创建新变量“NEG_EARN”,它是变量“ni”的前 10 次观察(我的数据中为 10 年)的负值数。我也使用以下代码,但它不起作用 -
funda_addit <- funda_addit %>%
group_by(TICKER) %>%
arrange(year) %>%
mutate(NEG_EARN = rollapply(ni, 10, length(which(ni<0)), partial=TRUE)) %>%
ungroup()
解决方案
您可以创建一个向量cumsum(ni < 0)
,然后从中减去该向量的滞后版本
funda_addit %>%
group_by(TICKER) %>%
arrange(year) %>%
mutate(neg_earn = {cs <- cumsum(ni < 0)
cs - lag(cs, 10, default = 0)})
rollapply
如果您更改为rollapplyr
(使用 akrun 的示例数据进行测试),这相当于 akrun 的答案
use_cumsum <-
funda_addit %>%
group_by(TICKER) %>%
arrange(year) %>%
mutate(neg_earn = {cs <- cumsum(ni < 0)
cs - lag(cs, 10, default = 0)})
use_rollapply <-
funda_addit %>%
group_by(TICKER) %>%
arrange(year) %>%
mutate(neg_earn = rollapplyr(ni, 10, FUN = f1, partial=TRUE))
all(use_cumsum == use_rollapply)
# [1] TRUE
推荐阅读
- mips - MIPS 保存到地址为变量的寄存器
- c# - Azure 媒体服务、带有 V3 api 和 ODataQuery 的 GetLocators
- amazon-web-services - AWS ECS 找出容器的托管/父任务或任务定义
- python - 如果下一行在特定列中有 NaN,则连接 pandas 行
- html - Angular 中的可滚动路由器插座
- sql-server - 更新地理数据类型
- python - PyAES 输出包括 b 和 ''
- spring - 有没有办法重新加载 Spring Boot 应用程序而无需在 STS 上重新运行应用程序?
- parallel-processing - 访问 CosmosDB 的机器人导致“PreconditionFailed”错误
- linux - 浏览器通过ip,Debian,Apache2更改域