首页 > 解决方案 > 在R中按年份计算偏斜和峰度

问题描述

我有一个看起来像这样的表:

start_table <- data.frame("Water_Year" =  c("1903", "1903", "1904", "1904"), "X" = c(13, 11, 12, 
15), "Day" = c(1, 2, 1, 2))

(“天”列不参与我的偏斜峰度计算,它只是在我的表中)

我想要一个计算按年份分组的偏斜和峰度值的表:

end_table <- data.frame("Water_Year" =  c("1903", "1904"), "Skew" = c("skew_number_here", 
"skew_number_here"), "Kurtosis" = c("kurtosis_number_here", "kurtosis_number_here"))

我不知道如何按年份对其进行分组以执行这些计算。

标签: rskewgroup-summarieskurtosis

解决方案


您还可以定义偏度/峰度函数:

kurtosis <- function(x) {  
 m4 <- mean((x - mean(x))^4) 
 kurtosis <- m4/(sd(x)^4) - 3  
 kurtosis
}

skewness <-  function(x) {
 m3 <- mean((x - mean(x))^3)
 skewness <- m3/(sd(x)^3)
 skewness
}

然后,将其应用于base R

aggregate(X ~ Water_Year, 
          FUN = function(x) c(kurtosis = kurtosis(x), skewness = skewness(x)),
          data = start_table)

  Water_Year X.kurtosis X.skewness
1       1903      -2.75       0.00
2       1904      -2.75       0.00

推荐阅读