2012-10-01 69 views
0

我有一個包含10個不同變量的表。現在我想計算諸如平均值,Q1,Q3,SD,中位數,IQR,偏度和峯度的各種東西。R計算一組分佈的值

我可以單獨計算所有這些,但它們是我可以在哪裏運行它們的任何方式循環讓我獲得上述所有東西的價值。

謝謝。 塞特希

回答

2
set.seed(1) 
df <- data.frame(a=rnorm(10),b=rnorm(10)) 
summarydist <- function(x) { 
    y1 <- summary(x) 
    y2 <- IQR(x) 
    names(y2) <- "IQR" 
    require(moments) 
    y3 <- skewness(x) 
    names(y3) <- "Skewness" 
    y4 <- kurtosis(x) 
    names(y4) <- "kurtosis" 
    c(y1,y2,y3,y4) 

} 
sapply(df,summarydist) 

#     a   b 
#Min.  -0.8356000 -2.2150000 
#1st Qu. -0.5462000 -0.0377500 
#Median 0.2566000 0.4919000 
#Mean  0.1322000 0.2488000 
#3rd Qu. 0.5537000 0.9132000 
#Max.  1.5950000 1.5120000 
#IQR  1.0998807 0.9509302 
#Skewness 0.2961938 -1.1871418 
#kurtosis 2.2752871 3.8598299 
+0

感謝羅納德。總結只是給出了上述的值。但是,如果我想在循環中運行一些我的函數,我在問題中提到了如何運行該函數。謝謝 – SNT

+0

我的編輯對答案有幫助嗎? – Roland

1

使用Roland的DF你可以使用basicStatsfBasic包,以避免寫一個函數

# library(fBasics) 
basicStats(df) 
        a   b 
nobs  10.000000 10.000000 
NAs   0.000000 0.000000 
Minimum  -0.835629 -2.214700 
Maximum  1.595281 1.511781 
1. Quartile -0.546187 -0.037748 
3. Quartile 0.553693 0.913182 
Mean   0.132203 0.248845 
Median  0.256576 0.491872 
Sum   1.322028 2.488450 
SE Mean  0.246843 0.338210 
LCL Mean -0.426195 -0.516240 
UCL Mean  0.690600 1.013930 
Variance  0.609314 1.143862 
Stdev  0.780586 1.069515 
Skewness  0.252895 -1.013599 
Kurtosis -1.157017 0.126462 

只需選擇你需要的東西:

DF <- basicStats(df)[c(3:8,15:16),] 
rbind(DF, IQR=DF[4,]-DF[3,]) 
        a   b 
Minimum  -0.835629 -2.214700 
Maximum  1.595281 1.511781 
1. Quartile -0.546187 -0.037748 
3. Quartile 0.553693 0.913182 
Mean   0.132203 0.248845 
Median  0.256576 0.491872 
Skewness  0.252895 -1.013599 
Kurtosis -1.157017 0.126462 
IQR   1.099880 0.950930 
+0

請注意偏度和峯度的不同定義,例如,比較'moments :: kurtosis(df $ a); basicStats(df $ a)['Kurtosis',]''的輸出。 – Roland

+0

我注意到了當我嘗試使用e1071和時刻的任何想法可能是什麼原因之間的夸特價值之間的差異。 – SNT