我有一个巨大的向量,它有几个NA
值,我试图找出这个向量中的最大值(向量都是数字),但由于NA
的值,我无法做到这一点。
如何删除NA
值才能计算最大值?
发布于 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
发布于 2011-10-10 06:22:22
您可以调用max(vector, na.rm = TRUE)
。更广泛地说,您可以使用na.omit()
函数。
发布于 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
https://stackoverflow.com/questions/7706876
复制相似问题