从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的元素。