如何在R语言中按月份排序日期数据?新手求助代码排错
问题修正建议
代码中的核心错误
mutate(weather, 'month'):dplyr管道中,mutate不需要重复传入数据框对象,直接定义新列即可,这行写法完全错误。group_by(month = lubridate::floor_date(weather$Day, 'month')):管道内引用数据列时无需加weather$,直接用列名Day即可,否则会破坏管道的上下文传递逻辑。summarise(weather.month$High):weather.month是你即将生成的对象,此时还不存在;且summarise需要明确计算逻辑(比如求均值、总和)并为结果列命名。
修正后的示例代码
假设你的Day列是日期格式(如果不是,先通过lubridate转换),以下是按月份分组并计算每月气温统计值的代码:
library(readr) library(dplyr) library(lubridate) library(ggplot2) library(ggridges) # 读取数据,显式指定Day为日期类型 weather <- read_csv("R/weather.csv", col_types = cols(Day = col_date(), High = col_number(), Low = col_number(), Precip = col_number(), Snow = col_number(), Snowd = col_integer())) # 查看数据基础信息 class(weather) head(weather) # 按月份分组并汇总统计 weather.month <- weather %>% # 生成月份标识(取当月第一天作为分组依据) mutate(month = floor_date(Day, "month")) %>% # 按月份分组 group_by(month) %>% # 汇总计算:每月最高温、最低温的平均值,忽略缺失值 summarise(avg_high = mean(High, na.rm = TRUE), avg_low = mean(Low, na.rm = TRUE)) %>% # 取消分组,方便后续操作 ungroup() # 查看分组汇总结果 weather.month
额外说明
- 如果
Day列不是日期格式,先添加mutate(Day = mdy(Day))或mutate(Day = ymd(Day))转换(根据你的日期字符串格式选择对应函数)。 - 如果需要按月份名称(如"1月"、"February")分组,可以替换成
mutate(month_name = month(Day, label = TRUE)),然后按month_name分组。
内容的提问来源于stack exchange,提问作者LeAnn Hall
相关产品推荐
相关产品推荐

