R语言tidyverse场景下如何对dbl类型temp列实现向下取整
实现方案
对双精度浮点型的temp列做向下取整后再分组,直接使用R内置的floor()函数即可实现,根据是否需要保留原始temp值,有两种常用写法:
- 写法1(最小代码改动):在分组环节直接对temp值取整,不修改原数据集的列,最终输出的列名与原有逻辑完全一致:
library(tidyverse) library(nycflights13) dep_delay_by_temp <- flights %>% inner_join(weather, by = c( "origin" = "origin", "year" = "year", "month" = "month", "day" = "day", "hour" = "hour" )) %>% group_by(temp = floor(temp)) %>% summarise(avg_delay = mean(dep_delay, na.rm = TRUE))
- 写法2(直接修改temp列):如果不需要保留原始的浮点型temp值,可以在分组前用
mutate把temp列的值替换为向下取整的结果:
dep_delay_by_temp <- flights %>% inner_join(weather, by = c( "origin" = "origin", "year" = "year", "month" = "month", "day" = "day", "hour" = "hour" )) %>% mutate(temp = floor(temp)) %>% group_by(temp) %>% summarise(avg_delay = mean(dep_delay, na.rm = TRUE))
补充说明:
floor()的计算逻辑为返回不大于输入值的最大整数,完全匹配向下取整的需求。如果原数据的temp列存在缺失值,分组逻辑与原有代码完全一致,会自动将缺失值归为单独的NA组,不会改变原有平均延误的计算规则。
内容的提问来源于stack exchange,提问作者Destry3
相关产品推荐
相关产品推荐

