编写R语言correlateHeightSpeed()函数,按过山车类型与材质统计指标
实现correlateHeightSpeed()函数批量计算过山车分组统计量
需求说明
需要创建R函数correlateHeightSpeed(),输入过山车数据后生成height_Speed数据框:
- 忽略含
NA的记录 - 按**材质类型(material_type)和座位类型(seating_type)**分组
- 每组计算:平均高度、平均速度、高度与速度的相关系数
示例数据
coaster_Data <- structure(list(name = c("Goudurix", "Dream catcher", "Alucinakis", "Anaconda", "Azteka", "Bat Coaster", "Batman : Arkham Asylum", "Big Thunder Mountain", "EqWalizer", "Calamity Mine"), material_type = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), levels = c("Steel", "Wooden", "Hybrid", "na"), class = "factor"), seating_type = c("Sit Down", "Suspended", "Sit Down", "Sit Down", "Sit Down", "Inverted", "Inverted", "Sit Down", "Sit Down", "Sit Down"), speed = c(75, 45, 30, 85, 55, 70, 80, 60, 76, 48), height = c(37, 25, 8, 35, 17, 20, 32, 22, 36, 14)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
完整函数实现
使用dplyr包实现批量分组统计,代码如下:
# 先安装并加载dplyr(首次运行需安装) # install.packages("dplyr") library(dplyr) correlateHeightSpeed <- function(input_data) { height_Speed <- input_data %>% # 过滤掉speed或height含NA的行 filter(!is.na(speed), !is.na(height)) %>% # 按材质和座位类型分组,自动覆盖所有类型组合 group_by(material_type, seating_type) %>% # 计算各组统计量 summarise( avg_height = mean(height, na.rm = TRUE), avg_speed = mean(speed, na.rm = TRUE), height_speed_cor = cor(height, speed, use = "complete.obs"), .groups = "drop" # 取消分组状态,返回普通数据框 ) return(height_Speed) } # 测试函数 result <- correlateHeightSpeed(coaster_Data) print(result)
输出结果示例
运行测试代码后,得到如下结果:
# A tibble: 4 × 5 material_type seating_type avg_height avg_speed height_speed_cor <fct> <chr> <dbl> <dbl> <dbl> 1 Steel Inverted 26 75 1 2 Steel Sit Down 22.8 57.3 0.977 3 Steel Suspended 25 45 NA 4 Wooden Sit Down 35 85 NA
注:样本量不足2个的分组,相关系数会返回NA,符合统计逻辑。
内容的提问来源于stack exchange,提问作者uzair pawaskar
相关产品推荐
相关产品推荐

