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

R语言新手求助:提取多年8月上下半月数据总计数

解决R语言中提取指定日期范围频次总和的问题

问题分析

你之前的代码错误在于用==和&判断日期同时等于08-01和08-15,逻辑上不可能匹配任何数据。正确思路是先筛选1992-2001年8月的数据,再区分上下半月,最后按年份和半月分组求和。

步骤1:确保日期列是日期类型

首先把Dates列转换为日期格式(如果还未转换):

df$Dates <- as.Date(df$Dates)

方法一:基础R实现

# 筛选1992-2001年8月的数据
df_filtered <- subset(df, 
                      format(Dates, "%Y") %in% 1992:2001 & 
                      format(Dates, "%m") == "08")

# 添加上下半月标记列
df_filtered$half <- ifelse(as.integer(format(df_filtered$Dates, "%d")) <= 15, 
                           "上半月", "下半月")

# 按年份和半月分组求和
result <- aggregate(频次列 ~ format(Dates, "%Y") + half, 
                    data = df_filtered, 
                    FUN = sum)

# 重命名年份列更直观
colnames(result)[1] <- "年份"
print(result)

方法二:tidyverse(dplyr+lubridate)实现(更直观)

先加载所需包:

library(dplyr)
library(lubridate)

然后处理数据:

result <- df %>%
  # 提取年、月、日,添加上下半月标记
  mutate(
    年份 = year(Dates),
    月份 = month(Dates),
    半月 = ifelse(day(Dates) <= 15, "上半月", "下半月")
  ) %>%
  # 筛选目标范围数据
  filter(年份 >= 1992, 年份 <= 2001, 月份 == 8) %>%
  # 分组求和
  group_by(年份, 半月) %>%
  summarise(总频次 = sum(频次列), .groups = "drop")

print(result)

示例数据运行结果

针对你提供的示例数据,运行后会得到如下结果:

年份   半月 总频次
1  1994  上半月     4
2  1994  下半月     3
3  1995  上半月     5
4  1995  下半月     3
5  1996  上半月     1
6  1998  上半月     2
7  1998  下半月     1
8  1999  上半月     1
9  2000  上半月     1
10 2001  下半月     5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:25:21