我有一个非常大的数据框,称为FTSE。在这里他的结构。
str(FTSE)
'data.frame': 21167 obs. of 5 variables:
$ Name : Factor w/ 2 levels "FTSE MIB","FTSE MIB NET TOT ": 1 1 1 1 1 1 1 1 1 1 ...
$ DateLastTrade: Factor w/ 18 levels "12/10/13","12/11/13",..: 9 9 9 9 9 9 9 9 9 9 ...
$ LastPrice : num 19091 19008 19002 19018 19018 ...
$ Open : num 19091 19091 19091 19091 19091 ...
$ LastClose : num 19021 19021 19021 19021 19021 ...
我试着总结一下,我已经获得了:
summary(FTSE)
Name DateLastTrade LastPrice Open LastClose
FTSE MIB :10289 12/3/13 : 1370 Min. :17750 Min. :17811 Min. :17805
FTSE MIB NET TOT :10878 12/4/13 : 1370 1st Qu.:18124 1st Qu.:18055 1st Qu.:18124
12/6/13 : 1370 Median :18321 Median :18310 Median :18313
12/2/13 : 1369 Mean :18366 Mean :18375 Mean :18352
12/5/13 : 1369 3rd Qu.:18595 3rd Qu.:18752 3rd Qu.:18697
12/23/13: 1353 Max. :19091 Max. :19091 Max. :19021
(Other) :12966
注意“LastPrice”栏目。 如果我尝试直接总结LastPrice(我在分析中实际需要的变量),我已经获得了这个,这与以前的不同。
summary(FTSE$LastPrice)
Min. 1st Qu. Median Mean 3rd Qu. Max.
17750 18120 18320 18370 18600 19090
我是R上的新手,我真的无法理解为什么价值观会有所不同。这是一个四舍五入的问题?我已经阅读了很多关于此的答案,但我找不到统一结果的解决方案。 我真的坚持这个问题。
感谢任何可以帮助我甚至尝试理解我的问题的人。 此致
为shujaa编辑:
max(FTSE$LastPrice)
[1] 19091.3
FTSE[which.max(FTSE$LastPrice), ]
Name DateLastTrade LastPrice Open LastClose
1 FTSE MIB 12/2/13 19091.3 19091.3 19021.48
答案 0 :(得分:7)
这是一个四舍五入的问题。 summary(FTSE$LastPrice)
的所有输出只有4位有效数字。如果您查看其?summary
部分中的Usage
,您会看到数字的默认值(作为命名参数),再加上数字的默认值作为选项,您将获得4。
# summary(object, ..., digits = max(3, getOption("digits")-3))
> getOption("digits")
[1] 7
所以试试:
summary(FTSE$LastPrice, digits=7)
然而,未解决的问题仍然存在:为什么summary.data.frame函数的舍入程度不同,因为.default
和.data.frame
的数字默认参数相同方法?查看代码,您会看到summary.data.frame实际上首先在其列上使用固定值digits = 12L执行summary.default
,然后使用数字参数format
。在我看来,帮助页面在这个区域的参数描述中有些模糊不清
digits: integer, used for number formatting with signif() (for summary.default) or
format() (for summary.data.frame).
它完全忽略了data.frame列的默认(和固定)signif完全不同的事实。
答案 1 :(得分:1)
method
上的摘要data.frame
与vector
的默认方法不同。可能导致使用不同的精度进行计算。 Read more here。如果明确指定数字,则有效:
让我们创建数据:
nr <- 21167
set.seed(nr)
temp <- data.frame(Name=sample(c("FTSE","FTSE NET"),nr,replace=T),
DateLastTrade=sample(1:18,nr,replace=T),
LastPrice = sample(18000:21000,nr,replace=T),
Open = 19091,
LastClose = 19021
)
str(temp)
现在让我们重现你得到的东西:
summary(temp)
summary(temp$LastPrice)
现在让我们解决一下:
summary(temp,digits=7)
summary(temp$LastPrice,digits=7)
注意:这仅在您的号码<10 ^ 7-1时有效,即如果它们具有&lt; = 7位数。您在10 ^ 7处看不到效果,但如果有10 ^ 7 + 1,则最后一位数将向下舍入为零。要解决此问题,您必须将数字增加到8(依此类推)。使用更大的值更安全,例如digit=10