R - 摘要(数据)和摘要(数据$变量)的差异
R - Discrepancy in summary(data) and summary(data$variable)
我有一个 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
@r2evans 的评论是正确的,因为差异是由 summary.data.frame
和 summary.default
的差异引起的。
两种方法的 digits
默认值为 max(3L, getOption("digits") - 3L)
。如果您没有更改您的选项,这将评估为 4L
。但是,这两种方法在格式化输出时使用它们的 digits
参数不同,这就是两种方法输出不同的原因。来自 ?summary
:
digits
: integer, used for number formatting with signif()
(for summary.default
) or format()
(for 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
参数作为唯一的 建议 (?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 位数分位数,不进行四舍五入。
如果您明确提供大于 4 的 digits
参数,您将得到相同的结果:
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
我有一个 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
@r2evans 的评论是正确的,因为差异是由 summary.data.frame
和 summary.default
的差异引起的。
两种方法的 digits
默认值为 max(3L, getOption("digits") - 3L)
。如果您没有更改您的选项,这将评估为 4L
。但是,这两种方法在格式化输出时使用它们的 digits
参数不同,这就是两种方法输出不同的原因。来自 ?summary
:
digits
: integer, used for number formatting withsignif()
(forsummary.default
) orformat()
(forsummary.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
参数作为唯一的 建议 (?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 位数分位数,不进行四舍五入。
如果您明确提供大于 4 的 digits
参数,您将得到相同的结果:
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