如果值== -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} ))
但我得到了一个错误。有人可以帮帮我吗?
答案 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回答更多。