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

R语言判断data.frame中日期是否为周末:代码问题排查与解决

问题描述

我有如下R语言的data.frame:

dates <- sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12)
df <- data.frame(dates)
df$week_day <- weekdays(as.Date(df$dates))

我希望判断这些日期是否为周末,尝试了以下代码:

df$weekday <- as.character(df$week_day)

for (i in 1:nrow(df)) {
 if(df$week_day[i] == "Saturday"){
  df$Weekend[i] == 1
  } else if (df$week_day[i] == "Monday"){
  df$Weekend[i] == 1
  }
 }

但这段代码无法正常运行,请问原因是什么?应该如何修正?


代码失效的原因

  • 赋值符号用错:代码里用了==(比较运算符)而非<-/=(赋值运算符),根本没给df$Weekend写入值,只是做了无意义的比较。
  • 目标列未初始化:df$Weekend在循环前没创建,即便R会自动生成列,结合上面的错误也不会有有效内容。
  • 逻辑错误:把周一(Monday)当成了周末,实际周末应该是周六(Saturday)和周日(Sunday)。
  • 冗余代码:df$weekday <- as.character(df$week_day)完全多余,weekdays()返回的本身就是字符型,无需二次转换。

修正方案

方案1:修正循环代码

先初始化目标列,替换赋值符号,修正判断逻辑:

# 先初始化Weekend列,默认设为0(非周末)
df$Weekend <- 0

for (i in 1:nrow(df)) {
  if(df$week_day[i] == "Saturday" || df$week_day[i] == "Sunday"){
    df$Weekend[i] <- 1  # 用<-完成赋值
  }
}

方案2:高效向量化操作(推荐)

R的核心优势是向量化运算,完全不需要循环,用%in%直接批量判断:

# 生成0/1标记
df$Weekend <- ifelse(df$week_day %in% c("Saturday", "Sunday"), 1, 0)

# 也可以直接生成逻辑值(TRUE/FALSE),后续可按需转数字
df$Weekend <- df$week_day %in% c("Saturday", "Sunday")

特殊情况处理

如果你的R环境是中文 locale,weekdays()会返回中文(比如“星期六”“星期日”),需要把判断条件改成对应中文:

df$Weekend <- ifelse(df$week_day %in% c("星期六", "星期日"), 1, 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:39:52