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

时间:2017-02-04 07:28:27

标签: r summary

我有一个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 个答案:

答案 0 :(得分:1)

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

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

  

digits:整数,用于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使用digitsformat(q, digits = 4L) ## 0% 25% 50% 75% 100% ## " 0" " 6778" "10395" " 9354" "12811" "21194" 使用digits参数作为 sugggestion ?format)的有效位数。显示:

4

因此,当使用默认的summary.default(data$x)参数值summary.data.frame(data[2])时,digits将5位分位数舍入为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 显示5位分位数,但没有四舍五入。

如果明确提供大于4的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 

作为默认{{1}}的两种方法差异的一个极端例子:

{{1}}