使用na.rm = TRUE时,总结函数返回-inf

6
我最近编写了一个简单的R脚本来总结三个不同的数据框。自从更新到最新版本的R和R Studio后,当我在dplyr中使用summarize函数仅针对其中一个数据框(其他两个正常)时,我遇到了一种我以前没有见过的输出。我也收到了一系列我不熟悉的警告。请注意,在更新之前,我按原样运行了脚本,并且对于任何数据框都没有问题。
有问题的数据框称为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个回答

6

请查看?max

数字的空集的最小值和最大值分别为+Inf和-Inf(按此顺序!),这确保了传递性,例如,min(x1, min(x2)) == min(x1, x2)。对于数字x,当length(x) == 0(如果请求删除缺失值)时,max(x) == -Inf并且min(x) == +Inf。但是,即使对于na.rm = TRUE,如果所有并行元素都是NApmaxpmin也会返回NA

由于组D中没有非NA值,因此max返回空集的值。


0
晚来了,但解决方案是在没有值可最大化时返回NA而不是Inf。这可以使用hablar包的s函数来实现。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接