首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从向量中删除NA值

从向量中删除NA值
EN

Stack Overflow用户
提问于 2011-10-10 06:08:07
回答 3查看 577.8K关注 0票数 212

我有一个巨大的向量,它有几个NA值,我试图找出这个向量中的最大值(向量都是数字),但由于NA的值,我无法做到这一点。

如何删除NA值才能计算最大值?

EN

回答 3

Stack Overflow用户

发布于 2011-10-10 06:27:03

na.omit函数是许多回归例程内部使用的函数:

vec <- 1:1000
vec[runif(200, 1, 1000)] <- NA
max(vec)
#[1] NA
max( na.omit(vec) )
#[1] 1000
票数 101
EN

Stack Overflow用户

发布于 2011-10-10 06:22:22

您可以调用max(vector, na.rm = TRUE)。更广泛地说,您可以使用na.omit()函数。

票数 16
EN

Stack Overflow用户

发布于 2020-03-09 18:41:23

我运行了一个比较两种base方法的快速基准测试,结果发现x[!is.na(x)]na.omit更快。用户qwr建议我也试试purrr::dicard --这被证明要慢得多(尽管我会很高兴地对我的实现和测试发表评论!)

microbenchmark::microbenchmark(
  purrr::map(airquality,function(x) {x[!is.na(x)]}), 
  purrr::map(airquality,na.omit),
  purrr::map(airquality, ~purrr::discard(.x, .p = is.na)),
  times = 1e6)

Unit: microseconds
                                                     expr    min     lq      mean median      uq       max neval cld
 purrr::map(airquality, function(x) {     x[!is.na(x)] })   66.8   75.9  130.5643   86.2  131.80  541125.5 1e+06 a  
                          purrr::map(airquality, na.omit)   95.7  107.4  185.5108  129.3  190.50  534795.5 1e+06  b 
  purrr::map(airquality, ~purrr::discard(.x, .p = is.na)) 3391.7 3648.6 5615.8965 4079.7 6486.45 1121975.4 1e+06   c

作为参考,这里是x[!is.na(x)]na.omit的原始测试

microbenchmark::microbenchmark(
    purrr::map(airquality,function(x) {x[!is.na(x)]}), 
    purrr::map(airquality,na.omit), 
    times = 1000000)


Unit: microseconds
                                              expr  min   lq      mean median    uq      max neval cld
 map(airquality, function(x) {     x[!is.na(x)] }) 53.0 56.6  86.48231   58.1  64.8 414195.2 1e+06  a 
                          map(airquality, na.omit) 85.3 90.4 134.49964   92.5 104.9 348352.8 1e+06   b
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7706876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档