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

基于Stock_ret列条件生成数据框新列的R语言求助

解决方案

首先构造你的原始数据框:

ID <- c(1,2,3,4,5,6,7,8,9,10)
Stock_ret <- c(-0.4, 0.5, 0.6, NA, NA, -0.8, -0.1, NA, -0.15, .28)
Covid.cases <- c(20, 200, 34, 10, 43, 15,11,3,4,55)
df1 <- data.frame(ID, Stock_ret, Covid.cases)

使用dplyr包的lag()函数和case_when()函数可以高效实现需求逻辑:

library(dplyr)

df2 <- df1 %>%
  mutate(
    c.covid.case.trading = case_when(
      # 当当前行Stock_ret非NA,且前两行Stock_ret均为NA时,取三行Covid.cases之和
      !is.na(Stock_ret) & is.na(lag(Stock_ret)) & is.na(lag(Stock_ret, 2)) ~ 
        lag(Covid.cases, 2) + lag(Covid.cases) + Covid.cases,
      # 当当前行Stock_ret非NA,仅前一行Stock_ret为NA时,取两行Covid.cases之和
      !is.na(Stock_ret) & is.na(lag(Stock_ret)) & !is.na(lag(Stock_ret, 2)) ~ 
        lag(Covid.cases) + Covid.cases,
      # 其余情况直接沿用Covid.cases的值
      TRUE ~ Covid.cases
    )
  )

运行上述代码后,df2的结果与你提供的目标数据框完全一致:

ID Stock_ret Covid.cases c.covid.case.trading
1   1     -0.40          20                   20
2   2      0.50         200                  200
3   3      0.60          34                   34
4   4        NA          10                   10
5   5        NA          43                   43
6   6     -0.80          15                   68
7   7     -0.10          11                   11
8   8        NA           3                    3
9   9     -0.15           4                    7
10 10      0.28          55                   55

逻辑说明

  • lag(x, n)函数用于获取x列的第n行前的值,这里用它来判断前一行、前两行的Stock_ret状态,同时提取对应的Covid.cases值
  • case_when()按顺序匹配条件,满足对应条件时执行右侧的计算逻辑,最后用TRUE ~ Covid.cases覆盖所有未匹配的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:05:29