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

周五有公休日时,如何将USDINR日度数据转换为周度数据?

日转周度数据处理:周五休市时标记周四为周收盘价

问题背景

需将USDINR日度数据转换为周度/月度数据,但周五常因市场休市缺失。每年约18个休市日,20年共360个,计划通过二进制变量筛选实现高效处理,核心需求:当周五缺失时,将前一天周四标记为周度收盘价(给对应周四的week字段赋值1)。

尝试过的无效代码

第一段代码(week始终返回0)

for(i in 1:length(df01$day)){
        
if(df01$day[i] == 'Friday'){
        
df01$count[i] = 1
        
} else df01$count[i] = 0
        
if(seq(df01$count[i] == 0)>4){
        
df01$week['Thursday'] = 1
        
} else df01$week[i] = 0
        
}

第二段代码(week仍返回0)

for(i in 1:length(df01$day)){
        
  if(df01$day[i] == 'Friday'){
        
    df01$count[i] = 1
        
  } else df01$count[i] = 0
        
}
        
        
for(i in 1:length(df01$day)){
        
  if(df01$count[i] == 1 & df01$count[i]+5 == 0){
        
    df01$week[i]+4 = 1
        
  } else df01$week[i] = 0
        
}

有效解决方案

核心思路

放弃低效循环,用R的向量化操作实现:

  1. 先给所有存在的周五标记为周收盘价(week=1)
  2. 找出每个周的最后一个交易日,无论该日是周五还是周四(周五缺失时),统一标记为week=1

具体代码实现

假设数据框df01包含标准Date类型的日期列date:

# 确保日期列是Date格式
df01$date <- as.Date(df01$date)

# 1. 初始标记:所有存在的周五设为周收盘价
df01$week <- ifelse(weekdays(df01$date) == "Friday", 1, 0)

# 2. 给每个日期分配ISO周标识(格式:年-周数)
df01$iso_week <- strftime(df01$date, "%Y-%V")

# 3. 提取每个周的最后一个交易日
library(dplyr)
last_trading_day_per_week <- df01 %>%
  group_by(iso_week) %>%
  slice(n()) %>%
  pull(date)

# 4. 覆盖标记:将每个周的最后交易日统一设为1
df01$week[df01$date %in% last_trading_day_per_week] <- 1

拓展:月度数据处理

用相同逻辑处理月度收盘价,标记每个月的最后一个交易日:

# 给每个日期分配年月标识(格式:年-月)
df01$year_month <- strftime(df01$date, "%Y-%m")

# 提取每个月的最后一个交易日
last_trading_day_per_month <- df01 %>%
  group_by(year_month) %>%
  slice(n()) %>%
  pull(date)

# 标记月度收盘价
df01$month <- ifelse(df01$date %in% last_trading_day_per_month, 1, 0)

原代码无效原因

  • 第一段代码:seq(df01$count[i] == 0)>4逻辑错误,seq()用法不符合需求;df01$week['Thursday']是按列名索引,而非行索引,完全偏离目标。
  • 第二段代码:df01$count[i]+5 == 0逻辑不通;df01$week[i]+4 = 1是语法错误,R不支持这种赋值方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:45:03