从vector中删除NA值
如何从vector中删除NA值?
我有一个巨大的向量,有一些NA
值,我试图find该向量中的最大值(vector是所有数字),但我不能这样做,因为NA值。
如何删除NA值,以便我可以计算最大值?
尝试?max
,你会发现它实际上有一个na.rm =
参数,默认设置为FALSE
。 (这是许多其他R函数的常见默认值,包括sum()
, mean()
等)
设置na.rm=TRUE
只是你所要求的:
d <- c(1, 100, NA, 10) max(d, na.rm=TRUE)
如果你想删除所有的NA
,请使用这个成语:
d <- d[!is.na(d)]
最后一点:其他函数(例如table()
, lm()
和sort()
)具有NA
相关的参数,它们使用不同的名称(并提供不同的选项)。 所以如果NA
在函数调用中遇到问题,那么在函数的参数中检查一个内置的解决scheme是值得的。 我发现那里通常有一个。
na.omit
函数是很多回归例程在内部使用的:
vec <- 1:1000 vec[runif(200, 1, 1000)] <- NA max(vec) #[1] NA max( na.omit(vec) ) #[1] 1000
你可以调用max(vector, na.rm = TRUE)
。 更一般地说,你可以使用na.omit()
函数。
?max
显示你有一个额外的参数na.rm
,你可以设置为TRUE
。
除此之外,如果你真的想删除NA
,只需使用如下所示:
myvec[!is.na(myvec)]
以防万一有新来的R想简化回答原来的问题
如何从vector中删除NA值?
这里是:
假设你有一个向量foo
如下:
foo = c(1:10, NA, 20:30)
运行length(foo)
给出22。
nona_foo = foo[!is.na(foo)]
length(nona_foo)
是21,因为NA值已被删除。
记住is.na(foo)
返回一个布尔matrix,所以用这个值的相反的索引foo
会给你所有不是NA的元素。