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

如何用R统计数据框中指定日期列落在起止日期间的数量?

解决方案:统计指定日期列中落在起止日期区间内的数量

完全可行,以下是几种在R中实现的实用方法:

方法1:使用dplyr(tidyverse生态)

先确保日期列是Date类型(若数据未转换,可先用as.Date()处理),再通过rowwise()结合across()逐行统计符合条件的日期数量:

# 加载dplyr包
library(dplyr)

# 构造示例数据
df <- data.frame(
  start.date = as.Date(c("2023-01-01", "2023-02-01")),
  end.date = as.Date(c("2023-01-10", "2023-02-15")),
  date1 = as.Date(c("2023-01-05", "2023-02-20")),
  date2 = as.Date(c("2023-01-12", "2023-02-10")),
  date3 = as.Date(c("2023-01-03", "2023-02-05")),
  date4 = as.Date(c(NA, "2023-02-18")),
  date5 = as.Date(c("2023-01-08", "2023-02-12"))
)

# 创建统计新变量
df <- df %>%
  rowwise() %>%
  mutate(count_in_range = sum(across(date1:date5, ~ .x >= start.date & .x <= end.date), na.rm = TRUE)) %>%
  ungroup()

# 查看结果
print(df)

na.rm = TRUE用于忽略缺失的日期值,若你的数据无缺失可直接去掉该参数。

方法2:使用Base R

无需额外加载包,利用rowSums()结合矩阵广播实现高效统计:

# 确保日期列转换为Date类型(若未处理)
date_cols <- c("start.date", "end.date", paste0("date", 1:5))
df[date_cols] <- lapply(df[date_cols], as.Date)

# 创建统计新变量
target_dates <- df[, paste0("date", 1:5)]
df$count_in_range <- rowSums((target_dates >= df$start.date) & (target_dates <= df$end.date), na.rm = TRUE)

# 查看结果
print(df)

这种写法性能更优,适合处理大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:36