You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中根据bondyieldTF判断RecessionTF后续观测以验证衰退指示正确性

解决dplyr中向量条件判断报错及滚动窗口衰退指示验证问题

错误原因

你使用的普通if()是标量判断函数,仅能处理单个值,但bondyieldTF是整列的向量(长度大于1),因此触发the condition has length>1错误。在dplyr管道中必须使用向量化的条件函数(如if_else()、case_when()),同时还要实现"当前及后续4行"的滚动窗口判断逻辑。

解决方案

方法1:使用slider包(推荐,灵活处理滚动窗口)

先安装并加载依赖包,再通过滚动窗口检查衰退存在性,最后判断指示是否正确:

library(dplyr)
library(slider)

EconFrame <- EconFrame %>%
  mutate(
    # 滚动检查当前行+后续4行的RecessionTF是否存在至少一个TRUE
    has_recession = slide_lgl(RecessionTF, ~any(.x), .before = 0, .after = 4),
    # 根据bondyieldTF状态判断指示正确性
    Indication = case_when(
      bondyieldTF ~ if_else(has_recession, "Correct", "Incorrect"),
      TRUE ~ NA_character_  # bondyieldTF为FALSE时标记为NA,可按需调整
    )
  )

方法2:手动用lead函数组合(无需额外包)

如果不想安装slider包,可通过lead()函数手动拼接当前及后续4行的衰退状态:

library(dplyr)

EconFrame <- EconFrame %>%
  mutate(
    # 组合当前行与后4行的RecessionTF,判断是否存在TRUE
    has_recession = RecessionTF | lead(RecessionTF, 1) | lead(RecessionTF, 2) | 
                    lead(RecessionTF, 3) | lead(RecessionTF, 4),
    # 判断指示正确性
    Indication = case_when(
      bondyieldTF ~ if_else(has_recession, "Correct", "Incorrect"),
      TRUE ~ NA_character_
    )
  )

示例数据验证结果

针对你提供的示例数据,处理后Indication列结果如下:

bondyieldTFRecessionTFIndication
TRUEFALSECorrect
TRUEFALSECorrect
TRUEFALSECorrect
TRUETRUECorrect
TRUETRUECorrect
FALSETRUENA
FALSETRUENA
FALSETRUENA
FALSETRUENA
FALSETRUENA
FALSEFALSENA

内容的提问来源于stack exchange,提问作者GnarTank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:15:28