2025-01-17 08:00:01

从向量中移除NA值

我有一个巨大的向量,它有两个NA值,我试图找到这个向量的最大值(向量都是数字),但我不能这样做,因为NA值。

我如何删除NA值,以便我可以计算最大?


当前回答

尝试吗,max,你会看到它实际上有一个na。rm = argument,默认为FALSE。(这是许多其他R函数的默认值,包括sum(), mean()等)

设置na。rm=TRUE只做你想要的:

d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)

如果您确实想删除所有的NAs,请使用以下习语:

d <- d[!is.na(d)]

最后注意:其他函数(例如table()、lm()和sort())具有与na相关的参数,它们使用不同的名称(并提供不同的选项)。因此,如果NA在函数调用中导致了问题,那么值得在函数的参数中检查内置解决方案。我发现那里通常已经有一个了。

其他回答

以防刚接触R的人想要原始问题的简化答案

如何从一个向量中移除NA值?

下面就是:

假设你有一个向量foo,如下所示:

foo = c(1:10, NA, 20:30)

运行长度(foo)给出22。

nona_foo = foo[!is.na(foo)]

length(nona_foo)为21,因为NA值已被删除。

记住is.na(foo)返回一个布尔矩阵,所以用这个值的相反值为foo索引将会给出所有非NA的元素。

另一个选项使用complete。这样的案例:

d <- c(1, 100, NA, 10)
result <- complete.cases(d)
output <- d[result]
output
#> [1]   1 100  10
max(output)
#> [1] 100

于2022-08-26与reprex v2.0.2创建

na。省略函数是很多回归例程内部使用的:

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

尝试吗,max,你会看到它实际上有一个na。rm = argument,默认为FALSE。(这是许多其他R函数的默认值,包括sum(), mean()等)

设置na。rm=TRUE只做你想要的:

d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)

如果您确实想删除所有的NAs,请使用以下习语:

d <- d[!is.na(d)]

最后注意:其他函数(例如table()、lm()和sort())具有与na相关的参数,它们使用不同的名称(并提供不同的选项)。因此,如果NA在函数调用中导致了问题,那么值得在函数的参数中检查内置解决方案。我发现那里通常已经有一个了。

max表示有一个额外的参数na。rm,你可以设置为TRUE。

除此之外,如果你真的想要删除NAs,只需使用如下方法:

myvec[!is.na(myvec)]