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

Group_by失效,summarize()计算结果完全相同?技术求助

问题原因分析

1. 分组变量与原数据行完全错位

你创建arth和no_arth列的逻辑完全错误:

  • 你先筛选出HAVARTH3=="1"的行存为a,HAVARTH3=="2"的行存为b,随后将a转成向量后拼接NA赋值给原数据的arth列,b转成向量拼接NA赋值给no_arth列。
  • 这种操作会导致:arth列的前nrow(a)行被强制赋值为1(不管原数据该行的HAVARTH3实际值是什么),其余行是NA;no_arth列的前nrow(b)行被强制赋值为2,其余行是NA。
  • 最终arth/no_arth列的取值和原数据对应行的关节炎状态完全不匹配,分组统计时自然无法得到正确的分组结果。

2. 分组逻辑冗余且错误

你用group_by(arth,no_arth)分组,而数据中没有任何一行同时拥有arth和no_arth的非NA值,分组后实际是把arth非NA的所有行、no_arth非NA的所有行分别统计,但由于变量错位,这两组的体重数据实际是原数据的随机切片,而非对应关节炎状态的样本,最终导致均值和标准差完全一致。

3. 体重NA值未过滤

你提到要去除weight的NA值,但现有代码未对weight的NA行进行过滤,进一步干扰了统计结果。


修正方案

直接基于原数据的HAVARTH3字段生成对应分类变量,保证每行的关节炎状态与体重一一对应:

library(dplyr)

# 数据清洗:过滤无效值,生成分类变量
BRFSS2015_clean <- BRFSS2015 %>%
  mutate(weight = WEIGHT2) %>%
  # 过滤体重NA值,仅保留HAVARTH3为1/2的有效样本
  filter(!is.na(weight), HAVARTH3 %in% c("1", "2")) %>%
  # 生成单一分类变量标记关节炎状态
  mutate(arthritis_status = case_when(
    HAVARTH3 == "1" ~ "arth",
    HAVARTH3 == "2" ~ "no_arth"
  ))

# 分组统计均值和标准差
BRFSS2015_clean %>%
  group_by(arthritis_status) %>%
  summarize(
    mean_weight = mean(weight),
    sd_weight = sd(weight)
  )

修正点说明

  • 直接在原数据行上生成分类变量,彻底避免数据错位问题;
  • 提前过滤无效样本,确保统计仅针对有效数据;
  • 用单一分类变量分组,逻辑清晰,符合分组统计的常规用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:05:24