R – Discrepancy in summary(data) and summary(data$variable)
我有一个包含 61 个观察值和 2 个变量的数据集。当我汇总整个数据时,第二个变量的分位数、中位数、平均值和最大值有时与我仅从第二个变量汇总得到的结果不同。这是为什么呢?
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
data <- read.csv(“testdata.csv”)
head(data) summary(data) summary(data[2]) # The following code yield different result: summary(data$x) |
- 您的调用等效于(在 S3 解析之后)summary.data.frame(data[2]) 和 summary.default(data$x)。函数的定义略有不同,统计数据也略有不同。计算四分位数是”取决于解释”,具体取决于数值向量的长度,并非 R 中的所有函数都做出与彼此或您相同的假设。要么找到你喜欢的方法,要么自己计算它们(在阅读 ?quantile 了解一些细节之后)。
@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的汇总统计向量:
|
1
2 3 4 |
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 数:
|
1
2 3 |
signif(q, digits = 4L)
## 0% 25% 50% 75% 100% ## 0 6778 10400 9354 12810 21190 |
而 summary.data.frame 使用 format,它使用它的 digits 参数作为要显示的有效位数的建议 (?format):
|
1
2 3 |
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 参数,您将得到相同的结果:
|
1
2 3 4 5 6 7 8 9 10 11 12 |
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) |
作为两个方法与默认digits的区别的极端例子:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
df <- data.frame(a = 1e5 + 0:100)
summary(df$a) summary(df) |
来源:https://www.codenong.com/42037750/
