首页 文章

R - 摘要(数据)和摘要(数据$变量)中的差异

提问于
浏览
2

我有一个data set,有61个观察值和2个变量 . 当我总结整个数据时,第二个变量的分位数,中位数,平均值和最大值有时不同于我从第二个变量汇总得到的结果 . 这是为什么?

data <- read.csv("testdata.csv")

head(data)
#   Group.1     x
# 1 10/1/12     0
# 2 10/2/12   126
# 3 10/3/12 11352
# 4 10/4/12 12116
# 5 10/5/12 13294
# 6 10/6/12 15420

summary(data)
#   Group.1           x        
# 10/1/12 : 1   Min.   :    0  
# 10/10/12: 1   1st Qu.: 6778  
# 10/11/12: 1   Median :10395  
# 10/12/12: 1   Mean   : 9354  
# 10/13/12: 1   3rd Qu.:12811  
# 10/14/12: 1   Max.   :21194  
# (Other) :55             

summary(data[2])
#       x        
# Min.   :    0  
# 1st Qu.: 6778  
# Median :10395  
# Mean   : 9354  
# 3rd Qu.:12811  
# Max.   :21194  

# The following code yield different result:

summary(data$x)
# Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
# 0    6778   10400    9354   12810   21190

1 回答

  • 1

    @ r2evans的评论是正确的,因为差异是由 summary.data.framesummary.default 的差异引起的 .

    两种方法的默认值 digits 均为 max(3L, getOption("digits") - 3L) . 如果您尚未更改选项,则评估为 4L . 但是,这两种方法在格式化输出时使用不同的 digits 参数,这是两种方法输出差异的原因 . 来自 ?summary

    digits:integer,用于使用signif()(对于summary.default)或format()(对于summary.data.frame)进行数字格式设置 .

    假设我们在问题中有 x 的摘要统计数据的向量:

    q <- append(quantile(data$x), mean(data$x), after = 3L)
    q
    ##   0%      25%      50%               75%     100% 
    ## 0.00  6778.00 10395.00  9354.23 12811.00 21194.00
    

    summary.default 中,使用 signif 格式化输出,将其输入舍入为提供的有效数字 digits

    signif(q, digits = 4L)
    ## 0%   25%   50%         75%  100% 
    ##  0  6778 10400  9354 12810 21190
    

    虽然 summary.data.frame 使用 format ,它使用它的 digits 参数作为要显示的有效位数的sugggestion(?format):

    format(q, digits = 4L)
    ##      0%     25%     50%             75%    100% 
    ## "    0" " 6778" "10395" " 9354" "12811" "21194"
    

    因此,当使用默认的 digits 参数值 4 时, summary.default(data$x) 将5位分位数舍入为4位有效数字;但是 summary.data.frame(data[2]) 显示5位分位数而没有舍入 .

    如果您明确提供 digits 参数大于4,您将得到相同的结果:

    summary(data[2], digits = 5L)
    ##        x          
    ## Min.   :    0.0  
    ## 1st Qu.: 6778.0  
    ## Median :10395.0  
    ## Mean   : 9354.2  
    ## 3rd Qu.:12811.0  
    ## Max.   :21194.0  
    
    summary(data$x, digits = 5L)
    ##   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##    0.0  6778.0 10395.0  9354.2 12811.0 21194.0
    

    作为默认 digits 的两种方法的差异的极端例子:

    df <- data.frame(a = 1e5 + 0:100)
    
    summary(df$a)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##  100000  100000  100000  100000  100100  100100 
    
    summary(df)
    ##       a         
    ## Min.   :100000  
    ## 1st Qu.:100025  
    ## Median :100050  
    ## Mean   :100050  
    ## 3rd Qu.:100075  
    ## Max.   :100100
    

相关问题