如果值 == -273.17,我试图用 NA 替换向量的值。
这是一个示例数据:
x <- c(32,33,34,-273.17,32)
我想得到这个:
x <- c(32,33,34,NA,32)
这是我尝试过的
x <- apply(x, 1,
(if (x==-273.17)
{x==NA} ))
但我得到了一个错误。任何人都可以帮助我吗?
如果值 == -273.17,我试图用 NA 替换向量的值。
这是一个示例数据:
x <- c(32,33,34,-273.17,32)
我想得到这个:
x <- c(32,33,34,NA,32)
这是我尝试过的
x <- apply(x, 1,
(if (x==-273.17)
{x==NA} ))
但我得到了一个错误。任何人都可以帮助我吗?
布尔索引,类似于@Konrad.Rudolph 的回答,使用基于默认值的容差?all.equal
:
tol <- 0.5 * .Machine$double.eps # tolerance close to machine precision
float.equal <- function(a, b, p.tol = tol) { abs(a - b) < p.tol }
x[float.equal(x, -273.17)] <- NA
如果您的要求可以简化为更易于编码的谓词,请考虑以下内容,例如:
x[x<0] <- NA
all.equal
适用于长度相等的向量,并报告被比较的完整对象的相等性,而不是元素方面的相等性。
对于 R 版本 3.0.1 (2013-05-16),isTRUE(all.equal())
不会产生预期的结果:
> all.equal(x, -273.17)
[1] "Numeric: lengths (5, 1) differ"
> isTRUE(all.equal(x, -273.17))
[1] FALSE
您通常会为此使用子集:
x[x == -273.17] <- NA
但是,请注意不要以这种方式比较浮点数。all.equal
是一个更好的选择,因为它考虑了表示的不准确性:
x[isTRUE(all.equal(x, -273.17))] <- NA
您可以使用ifelse
ifelse(x==-273.17, NA, x)
但我更喜欢@KonradRudolph 的回答。