我想对0到1之间的值向量进行分类.值低于.001,值高于.10或不感兴趣.因此,我希望这些范围内的值为NA.
当我运行下面的代码时,我收到一个警告:
Error in if (x[i] > 0.001 & x[i] <= 0.01) x[i] = 0.01 : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
如何修复代码?
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
}
Run Code Online (Sandbox Code Playgroud)
首先,一些测试数据:
set.seed(1); x = dnorm(rnorm(100))/(sample(1:100, 100, replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
子集可以通过以下方式完成:
x[x < .001] = NA
x[x > .1] = NA
Run Code Online (Sandbox Code Playgroud)
或者,您可以将它组合在一个语句中:
x[x < .001 | x > .1] = NA
Run Code Online (Sandbox Code Playgroud)
你遇到了问题,如果它没有找到一个NA在那里,所以从删除for环,但指数它们运行循环之前,所以你以后可以将其删除.
temp = which(x < .001 | x > .1) # Index the values you want to set as NA
Run Code Online (Sandbox Code Playgroud)
从for循环中删除以下条件:
if (x[i] > .10 & x[i] <= 1)
x[i] = NA
if (x[i] <= .001)
x[i] = NA
Run Code Online (Sandbox Code Playgroud)
运行for循环,然后使用temp设置值NA应该是NA.
x[temp] = NA
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
x[x < .001 | x > .1] = NA
out <- ceiling(x*100)/100
Run Code Online (Sandbox Code Playgroud)
与AKE使用地板的建议几乎相同.
这应该会得到与循环相同的结果.