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

R语言正态性分析绘图与组间检验的数据表格式化方法咨询

解决方法

第一步:将宽格式数据转换为长格式

你当前的数据是宽格式,每一行存储了一个分组的两类观测值,需要转换为每一行对应单个观测的长格式,才能适配绘图和统计检验的输入要求。
假设你导入的数据框命名为df,两种转换方法可选:

  • 方法1:使用tidyverse套件(更简洁)
# 未安装的话先运行 install.packages("tidyverse")
library(tidyverse)
df_long <- df %>%
  pivot_longer(
    cols = c(Light, Dark),
    names_to = "Light_type", # 存储光照类型的新列名
    values_to = "Value" # 存储对应数值的新列名
  )
  • 方法2:使用R基础函数reshape
df_long <- reshape(
  df,
  direction = "long",
  varying = list(c("Light", "Dark")),
  v.names = "Value",
  timevar = "Light_type",
  times = c("Light", "Dark")
)

转换完成的df_long共3列:Group(分组)、Light_type(光照类型:Light/Dark)、Value(对应数值),完全符合后续分析的格式要求。

第二步:绘制分组柱形图

用ggplot2绘图(美观度更高,自定义性强)

ggplot(df_long, aes(x = Group, y = Value, fill = Light_type)) +
  geom_col(position = position_dodge(0.9)) + # 并列柱形设置
  labs(x = "分组", y = "数值", fill = "光照类型") +
  theme_bw()

用R基础绘图函数实现

# 先把数值转为矩阵
val_mat <- t(as.matrix(df[, c("Light", "Dark")]))
rownames(val_mat) <- c("Light", "Dark")
# 绘制并列柱形图
barplot(
  val_mat,
  beside = TRUE,
  col = c("gold", "navy"),
  xlab = "分组",
  ylab = "数值",
  names.arg = df$Group
)
# 添加图例
legend("topright", legend = rownames(val_mat), fill = c("gold", "navy"))

第三步:统计显著性检验

根据你的分析需求选择对应方法即可:

  • 若要对比所有分组内Light和Dark的整体差异,数据符合正态分布的话使用配对t检验:
t.test(Value ~ Light_type, data = df_long, paired = TRUE)

数据不符合正态分布的话换用配对Wilcoxon秩和检验:

wilcox.test(Value ~ Light_type, data = df_long, paired = TRUE)
  • 若要对比不同分组之间的数值差异,以及分组和光照类型的交互效应,先做双因素方差分析:
aov_result <- aov(Value ~ Group * Light_type, data = df_long)
summary(aov_result)

方差分析结果显著的话,可进一步做Tukey事后多重比较:

TukeyHSD(aov_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:36:02