在数据框中同时计算,均值,方差和偏度的函数

时间:2019-03-08 00:10:18

标签: r function

我有这个数据框

um dois tres
1.2 1.9 0.1
1.2 1.1 2
2.2 1.2 0.4
3.0 1.8 2.6

,我需要在同一函数中计算数据帧的均值,方差和偏度。我将功能分开。 有什么建议吗?

mean <- function(x){
  sum(x)/length(x)
}

variance <- function(x){
    n <- length(x)
    m <- mean(x)
    (1/(n-1))*sum((x-m)^2)
}

skewness <- function(x) {
  n <- length(x)
  v <- var(x)
  m <- mean(x)
  third.moment <- (1/(n - 2))*sum((x - m)^3)
  third.moment/(var(x)^(3/2))
}

2 个答案:

答案 0 :(得分:1)

dput(data)
structure(list(um = c(1.2, 1.2, 2.2, 3), dois = c(1.9, 1.1, 1.2, 1.8), tres = c(0.1, 2, 0.4, 2.6)), class = "data.frame", row.names = c(NA,-4L))


# to use the function skewnewss install and load the package e1071
library(e1071)
sapply(data, function(x) c(means = mean(x), vars = var(x), skews = skewness(x)))

输出为每个输入列一次性生成所需的计算:

             um      dois       tres
   means 1.9000000 1.5000000 1.27500000
   vars  0.7600000 0.1666667 1.47583333
   skews  0.2535648 0.0000000 0.05788459

答案 1 :(得分:1)

您无需解释“数据框的”是否表示“按列”。假设它确实如此,并使用tidyr::gather()来将数据从宽到长整形,然后使用dplyr::summarise()进行计算。假设数据框名为data1,并使用moments::skewness

library(tidyr)
library(dplyr)
library(moments)

data1 %>%
  gather(Var, Val) %>% 
  group_by(Var) %>% 
  summarise(Mean = mean(Val), 
            Vari = var(Val), 
            Skew = skewness(Val))

# A tibble: 3 x 4
  Var    Mean  Vari   Skew
  <chr> <dbl> <dbl>  <dbl>
1 dois   1.5  0.167 0     
2 tres   1.28 1.48  0.0891
3 um     1.9  0.76  0.390

如果要获取所有数字的值,而不是按列,只需省略group_by

如果您想使用自己的函数-不需要,因为R在这种情况下会提供它们-但是您可以用它们的名字代替。