包含NA的字段上的范围

Dou*_*Fir 5 r range missing-data

我正在使用数据集,其中csv文件上的第11列具有数字数据.它也包含一些NA值.这是对象的str:

str(dataheart)
 num [1:4706] 14.3 18.5 18.1 NA NA NA 17.7 18 15.9 NA ...
Run Code Online (Sandbox Code Playgroud)

因此,作为R的新生,我曾期望结果为range(dataheart)最小值和最大值.从查看带有数据的CSV文件,我知道最小值和最大值分别为10.1和21.9.

但上面返回一个向量

[1] NA NA
Run Code Online (Sandbox Code Playgroud)

我对这个功能的理解不正确吗?

Ben*_*ker 50

你需要

range(x,na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

看到 ?range

对于额外的功劳,这里是使用的basestats包中的函数列表na.rm:

uses_na_rm <- function(x) is.function(fx <- get(x)) && 
                         "na.rm" %in% names(formals(fx))
basevals <- ls(pos="package:base")
basevals[sapply(basevals,uses_na_rm)]
##  [1] "colMeans"                "colSums"                
##  [3] "is.unsorted"             "mean.default"           
##  [5] "pmax"                    "pmax.int"               
##  [7] "pmin"                    "pmin.int"               
##  [9] "range.default"           "rowMeans"               
## [11] "rowsum.data.frame"       "rowsum.default"         
## [13] "rowSums"                 "Summary.data.frame"     
## [15] "Summary.Date"            "Summary.difftime"       
## [17] "Summary.factor"          "Summary.numeric_version"
## [19] "Summary.ordered"         "Summary.POSIXct"        
## [21] "Summary.POSIXlt"        

statvals <- ls(pos="package:stats")
statvals[sapply(statvals,uses_na_rm)]
## [1] "density.default"  "fivenum"          "heatmap"          "IQR"             
## [5] "mad"              "median"           "median.default"   "medpolish"       
## [9] "quantile.default" "sd"               "var"   
Run Code Online (Sandbox Code Playgroud)

为了进一步考虑R中哪些函数处理NAs以及如何处理,可以用na.action参数(lm和朋友)进行类似的函数搜索.

  • 不错的搜索功能,@ BenBolker! (10认同)