You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中编写ST函数,按指定城市计算数据框的均值与标准差

完成ST函数编写的解决方案

你的数据框df3如下:

CityIncomeCostAge
NY1237243243
NY6352863232
Boston6487284654
NJ6547735342
Boston7564725221
NY9363756335
Boston3262735254
NY9473866776
NJ6234485731
Boston5242768439
NJ7483474847
NY9273657353

原代码存在几个核心问题:

  • 函数参数名混乱(定义用c,判断用s)
  • 重复加载dplyr包(只需在函数外加载一次)
  • summarise_at语法错误,保留小数不能直接传第二个参数
  • 数据合并逻辑错误,且dataframe拼写错误(应为data.frame)
  • 城市存在性判断逻辑错误(向量比较不能直接用==)

以下是修正后的完整代码:

library(dplyr)
library(tidyr) # 用于数据格式转换

ST <- function(city_name) {
  # 检查输入城市是否存在于数据框中
  if (!(city_name %in% df3$City)) {
    return(NA)
  }
  
  # 筛选目标城市数据,转格式后计算均值和标准差
  result <- df3 %>%
    filter(City == city_name) %>%
    select(Income, Cost, Age) %>%
    pivot_longer(cols = everything(), names_to = "variable", values_to = "value") %>%
    group_by(variable) %>%
    summarise(
      Mean = round(mean(value, na.rm = TRUE), 2),
      SD = round(sd(value, na.rm = TRUE), 2)
    ) %>%
    ungroup()
  
  return(result)
}

# 调用示例
ST("NJ")

调用ST("NJ")会返回如下结果:

variableMeanSD
Income6754.67624.33
Cost5652.671462.03
Age40.008.08

代码说明

  • 先校验输入城市的合法性,不存在则返回NA
  • 用filter筛选指定城市的数据,避免全表分组计算
  • 通过pivot_longer将宽格式转为长格式,方便按变量分组统计
  • 用round强制将均值、标准差保留两位小数
  • 返回结构符合要求的三列表格

内容的提问来源于stack exchange,提问作者user11607046

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:45:30