0

如果值 == -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} ))

但我得到了一个错误。任何人都可以帮助我吗?

4

3 回答 3

3

布尔索引,类似于@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
于 2013-10-22T07:39:04.130 回答
2

您通常会为此使用子集:

x[x == -273.17] <- NA

但是,请注意不要以这种方式比较浮点数。all.equal是一个更好的选择,因为它考虑了表示的不准确性:

x[isTRUE(all.equal(x, -273.17))] <- NA
于 2013-10-22T07:09:49.100 回答
1

您可以使用ifelse

ifelse(x==-273.17, NA, x)

但我更喜欢@KonradRudolph 的回答。

于 2013-10-22T07:07:12.653 回答