如何为DataFrame补全缺失月份并按时间顺序排序?
解决方法
不用纠结Padr包,用dplyr+tidyr就能直接搞定,步骤如下:
- 加载依赖包
library(dplyr) library(tidyr)
- 先做分组统计
基于你提供的原始数据,先按州和月份统计观测数:
df <- data.frame( state = rep("California", 11), month_of_offense = c("July", "April", "September", "June", "October", "May", "June", "June", "April", "July", "December") ) df_summary <- df %>% group_by(state, month_of_offense) %>% summarise(observations = n(), .groups = "drop")
- 把月份转为有序因子
将字符型的月份转为以month.name(R内置的1-12月顺序向量)为水平的有序因子,既解决排序问题,又能识别出缺失的月份:
df_summary <- df_summary %>% mutate(month_of_offense = factor(month_of_offense, levels = month.name, ordered = TRUE))
- 补全缺失月份并填充0
用complete()函数补全每个州的所有12个月,缺失月份的观测数直接填0:
df_final <- df_summary %>% complete(state, month_of_offense, fill = list(observations = 0)) %>% arrange(state, month_of_offense)
- 最终结果示例
运行后df_final会包含目标州全部12个月的数据,缺失月份的观测数为0,且严格按时间顺序排列:
# 输出结果 state month_of_offense observations <chr> <ord> <dbl> 1 California January 0 2 California February 0 3 California March 0 4 California April 2 5 California May 1 6 California June 3 7 California July 2 8 California August 0 9 California September 1 10 California October 1 11 California November 0 12 California December 1
为啥不用Padr?
Padr的pad()函数需要完整的日期格式(比如带年份),而你只有单独的月份字符串,用tidyr::complete()结合有序因子更适配这种场景,操作更直接。
内容的提问来源于stack exchange,提问作者Willem Veldhoen
相关产品推荐
相关产品推荐

