草庐IT

关于 R:R – 摘要(数据)和摘要(数据$变量)的差异

codeneng 2023-03-28 原文

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)
#   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

  • 您的调用等效于(在 S3 解析之后)summary.data.frame(data[2])summary.default(data$x)。函数的定义略有不同,统计数据也略有不同。计算四分位数是"取决于解释",具体取决于数值向量的长度,并非 R 中的所有函数都做出与彼此或您相同的假设。要么找到你喜欢的方法,要么自己计算它们(在阅读 ?quantile 了解一些细节之后)。


@r2evans\\' 的注释是正确的,因为差异是由 summary.data.framesummary.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)
##   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
##    0.0  6778.0 10395.0  9354.2 12811.0 21194.0

作为两个方法与默认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)
##    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

有关关于 R:R – 摘要(数据)和摘要(数据$变量)的差异的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  4. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  8. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

随机推荐