我想对介于 0 和 1 之间的值向量进行分类。值低于 .001,值高于 0.10 或不感兴趣。因此,我希望这些范围内的值为 NA。
当我运行下面的代码时,我收到一条警告:
Error in if (x[i] > 0.001 & x[i] <= 0.01) x[i] = 0.01 : missing value where TRUE/FALSE needed
如何修复我的代码?
for (i in 1:length(x))
{
if (x[i] <= .001)
x[i] = NA
if (x[i] > .001 & x[i] <= .01)
x[i] = .01
if (x[i] > .01 & x[i] <= .02)
x[i] = .02
if (x[i] > .02 & x[i] <= .03)
x[i] = .03
if (x[i] > .03 & x[i] <= .04)
x[i] = .04
if (x[i] > .04 & x[i] <= .05)
x[i] = .05
if (x[i] > .05 & x[i] <= .06)
x[i] = .06
if (x[i] > .06 & x[i] <= .07)
x[i] = .07
if (x[i] > .07 & x[i] <= .08)
x[i] = .08
if (x[i] > .08 & x[i] <= .09)
x[i] = .09
if (x[i] > .09 & x[i] <= .10)
x[i] = .10
if (x[i] > .10 & x[i] <= 1)
x[i] = NA
}
最佳答案
先上一些测试数据:
set.seed(1); x = dnorm(rnorm(100))/(sample(1:100, 100, replace=TRUE))
子集可以通过以下方式完成:
x[x < .001] = NA
x[x > .1] = NA
或者,您可以将其组合在一个语句中:
x[x < .001 | x > .1] = NA
更新:回答为什么您的代码不起作用
如果它确实找到了
NA
,你就会遇到问题。在那里,所以从你的 for
中删除它们循环,但在运行循环之前将它们编入索引,以便稍后删除它们。temp = which(x < .001 | x > .1) # Index the values you want to set as NA
从您的
for
中删除以下条件环形:if (x[i] > .10 & x[i] <= 1)
x[i] = NA
if (x[i] <= .001)
x[i] = NA
运行您的
for
循环,然后使用 temp
将值设置为 NA
那应该是 NA
.x[temp] = NA
希望这可以帮助!
更新 2:两行
x[x < .001 | x > .1] = NA
out <- ceiling(x*100)/100
与 AKE 使用地板的建议几乎相同。
这应该为您提供与循环相同的结果。
关于r - 如何使用IF语句分配NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169631/