使用na.rm = TRUE

时间:2017-09-18 23:29:32

标签: r dplyr summarize

我最近构建了一个简单的R脚本来总结三个不同的数据框。自从更新到R和R Studio的最新版本以来,我在dplyr中仅使用一个数据帧中的汇总函数时遇到了前所未见的输出(其他两个都很好)。我也收到了一系列对我不熟悉的警告。请注意,在更新之前,我完全按照编写的方式运行脚本,没有任何数据帧的问题。

有问题的数据框称为VO2,其设置如下:

Name        Sex       VO2
AthleteA    M         50
AthleteA    M         52
AthleteA    M         NA
AthleteB    M         49
AthleteB    M         56
AthleteB    M         47 
AthleteC    M         42
AthleteC    M         NA
AthleteC    M         41 
AthleteD    M         NA
AthleteD    M         NA
AthleteD    M         NA 

我运行的代码是:

Test.Summary.VO2 = VO2 %>% group_by(Name, Sex) %>% 
summarise(Best.Score = max(VO2, na.rm=TRUE))

此代码生成以下摘要:

Name       Sex     Best.Score
AthleteA    M        52
AthleteB    M        56
AthleteC    M        42
AthleteD    M        -Inf

-Inf值在输出中是全新的。我无法弄清楚为什么它现在出现在只有NA的情况下。

如上所述,我对第二个数据框具有完全相同的布局,并运行相同类型的摘要。这里一切正常。当我用na.rm = TRUE进行总结时,它会删除NA个案而不用-Inf值替换NA个案。

当我使用以下方式查看数据框时,这有点不寻常:

View(Test.Summary.VO2)

我收到以下一系列警告信息:

There were 38 warnings (use warnings() to see them)
warnings()
Warning messages:
1: Unknown or uninitialised column: 'Quad'.
2: Unknown or uninitialised column: 'Quad'.
3: Unknown or uninitialised column: 'Quad'.
4: Unknown or uninitialised column: 'Quad'.

稍后在脚本中我生成一个名为“Quad”的新变量。但是,即使在我清除环境并重新启动R Studio之后,上面的警告也会出现。我甚至尝试重命名.csv文件并使用不同的数据框名称导入。这几乎就好像后面脚本中生成的“Quad”列悬挂在环境中的某个地方。

我真的不知道这里会发生什么。

我希望Stack上的一位R专家能够就如何解决这个问题向我提供一个想法。

感谢您的考虑。

2 个答案:

答案 0 :(得分:3)

请参阅?max

  

数字空集的最小值和最大值是+ Inf和-Inf(按此顺序!),它确保传递性,例如min(x1,min(x2))== min(x1,x2)。对于数值x max(x)== - Inf和min(x)== + Inf,只要length(x)== 0(在请求时删除缺失值之后)。但是,如果所有并行元素都是NA,则pmax和pmin返回NA,即使na.rm = TRUE也是如此。

您没有D组的任何非NA值,因此max会返回空集的值。

答案 1 :(得分:0)

晚于一方,但是一种解决方案是在没有最大化价值的情况下返回NA而不是Inf。这可以通过hablar软件包的功能来完成。

library(dplyr)
library(hablar)

VO2 %>% 
  group_by(Name, Sex) %>% 
  summarise(Best.Score = max(s(VO2)))

为您提供:

  Name     Sex   Best.Score
  <chr>    <chr>      <int>
1 AthleteA M             52
2 AthleteB M             56
3 AthleteC M             42
4 AthleteD M             NA