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

R如何通过单命令实现按行计算正态性、skewness及kurtosis

R 按行计算正态性、偏度、峰度解决方案

方案1:dplyr rowwise 实现(适配你原有的dplyr使用习惯)

需要提前加载dplyr和moments包:

library(dplyr)
library(moments)

示例数据构造

df3 <- read.table(text = "X0 X1 X2 X3 category
0  15 4  4  TAH
0  2  5  0  MAT
0  11 9  0  BIO", header = TRUE)

按行计算代码

如果数值列命名规则统一,推荐用c_across匹配列,无需手动枚举所有数值列:

df_result <- df3 %>%
  # 开启按行计算模式
  rowwise() %>%
  mutate(
    # 提取所有以X开头的数值列做计算
    normality_p = shapiro.test(c_across(starts_with("X")))$p.value,
    skewness_val = skewness(c_across(starts_with("X"))),
    kurtosis_val = kurtosis(c_across(starts_with("X")))
  ) %>%
  # 关闭按行分组,避免后续操作异常
  ungroup()

如果数值列没有统一命名规则,手动枚举列即可,把c_across(starts_with("X"))替换为c(X0,X1,X2,X3)即可。

方案2:base R apply 实现

不需要依赖tidyverse生态,适合轻量计算场景:

library(moments)
# 取前4列数值列按行遍历计算
row_stats <- t(apply(df3[,1:4], 1, function(x) {
  c(
    normality_p = shapiro.test(x)$p.value,
    skewness_val = skewness(x),
    kurtosis_val = kurtosis(x)
  )
}))
# 合并分类列与计算结果
df_result <- cbind(df3["category"], row_stats)

注意事项

  • Shapiro正态性检验要求样本量在3~5000区间,你当前每行仅4个样本,检验统计效力极低,仅做代码逻辑参考,实际分析建议补充每行的样本量。
  • 计算时注意不要将category分类列传入统计函数,避免数值转换报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:12:00