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

如何结合条件if语句使用floor_date函数?

问题解决:按月份天数条件使用floor_date分组日期

问题描述

尝试为数据集添加一列,用floor_date处理日期:31天的月份(如January、August)按16天分组,30天的月份(如April)按15天分组,但执行条件语句时触发错误:

Error in match(x, table, nomatch = 0L) : 'match' requires vector arguments

错误原因

  1. 普通if语句是标量判断逻辑,只能处理单个布尔值,无法对数据集中的每行做条件判断;
  2. 原代码中直接调用lubridate::month函数而非数据集中的month列,导致判断对象错误;
  3. 冗余代码:as.Date(paste(StartDate))完全没必要,因为StartDate本身就是Date类型。

解决方案

使用dplyr提供的向量化条件函数(case_when或if_else),对每行数据应用不同的floor_date规则:

方法1:用case_when(多场景友好)

library(tidyverse)

# 加载原数据集(数据集定义代码省略)

a <- a %>%
  mutate(
    new = case_when(
      month %in% c("January", "August") ~ lubridate::floor_date(StartDate, "16 days"),
      TRUE ~ lubridate::floor_date(StartDate, "15 days")
    )
  )

方法2:用if_else(二元条件更简洁)

a <- a %>%
  mutate(
    new = if_else(
      month %in% c("January", "August"),
      lubridate::floor_date(StartDate, "16 days"),
      lubridate::floor_date(StartDate, "15 days")
    )
  )

验证结果

运行后查看数据集a,new列会根据每行的月份自动应用对应的分组规则:

  • January、August的日期会按16天为一组向下取整;
  • April的日期会按15天为一组向下取整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:12:47