按周分组统计符合逻辑条件的行数(库存车辆统计需求)
按周统计符合条件的库存车辆数量
我尝试按周统计库存中满足DateAdded < Contract Date的车辆数量,但多次尝试的代码都没能得到正确结果,以下是我的尝试:
NCInv <- WeeklyVariableData$New %>% group_by(WeekYear) %>% nrow(WeeklyVariableData$New[WeeklyVariableData$New$DateAdded < WeeklyVariableData$New$`Contract Date`]) NCInv <- WeeklyVariableData$New %>% group by(WeekYear) %>% nrow(DateAdded < `Contract Date`) NCInv <- WeeklyVariableData$New%>% group_by(WeekYear) %>% summarize(NCInv = sum(DateAdded < `Contract Date`))
问题分析
- 前两段代码误用了
nrow():nrow()是用于获取整个数据框行数的基础函数,不能在dplyr的分组管道中直接用来统计分组内的符合条件行数;第二段代码还存在语法错误——group by应该写成group_by()。 - 第三段代码逻辑正确,但需要注意两个细节:确保日期列是标准日期格式,以及处理可能存在的缺失值。
正确代码实现
# 先转换日期列格式(如果原始数据不是日期类型) WeeklyVariableData$New$DateAdded <- as.Date(WeeklyVariableData$New$DateAdded) WeeklyVariableData$New$`Contract Date` <- as.Date(WeeklyVariableData$New$`Contract Date`) # 按周分组统计符合条件的车辆数 NCInv <- WeeklyVariableData$New %>% group_by(WeekYear) %>% summarize(NCInv = sum(DateAdded < `Contract Date`, na.rm = TRUE))
代码说明
group_by(WeekYear):按WeekYear字段对数据分组summarize(NCInv = sum(DateAdded <Contract Date, na.rm = TRUE)):- 逻辑表达式
DateAdded <Contract Date会返回布尔值,sum()会将TRUE视为1、FALSE`视为0,求和结果即为每组符合条件的车辆数量 na.rm = TRUE参数用于忽略因日期缺失产生的NA值,避免统计结果出现无效值
- 逻辑表达式
内容的提问来源于stack exchange,提问作者talkingtoducks
相关产品推荐
相关产品推荐

