用NA替换矢量的某些值

时间:2013-10-22 07:05:26

标签: r

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

但我得到了一个错误。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您通常会使用子集:

x[x == -273.17] <- NA

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

x[isTRUE(all.equal(x, -273.17))] <- NA

答案 2 :(得分:1)

您可以使用ifelse

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

但我喜欢@KonradRudolph回答更多。