R语言中如何从向量移除-Inf与Inf值?已掌握NA移除方法
移除向量中的NA、Inf和-Inf值
嘿,我懂你的困扰——na.omit()确实只认NA值,对Inf和-Inf完全不买账😅。这里有几个实用的方法帮你一次性清理掉这些“捣乱分子”:
最直接的方法:用
is.finite()筛选is.finite()函数会对有限的数值(既不是NA,也不是Inf/-Inf)返回TRUE,直接用它来子集化向量就能一步到位:# 测试向量 test_vec <- c(1, 2, NA, 3, Inf, -Inf) # 筛选有限数值 test_vec[is.finite(test_vec)] # 输出结果:[1] 1 2 3保留na.omit风格的自定义函数
如果需要像na.omit()那样记录被移除元素的位置(带na.action属性),可以先把Inf/-Inf转成NA,再用na.omit()处理:omit_inf_na <- function(x) { # 将Inf和-Inf替换为NA x[is.infinite(x)] <- NA # 调用na.omit移除所有NA na.omit(x) } # 测试函数 omit_inf_na(test_vec) # 输出结果: # [1] 1 2 3 # attr(,"na.action") # [1] 3 5 6 # attr(,"class") # [1] "omit"tidyverse用户可选:用dplyr::filter()
如果你平时习惯用tidyverse工具链,也可以用filter()配合is.finite():library(dplyr) test_vec %>% filter(is.finite(.))
这些方法都能完美解决你的问题,根据自己的需求选就行~
内容的提问来源于stack exchange,提问作者adam.888
相关产品推荐
相关产品推荐

