r - 如何使用IF语句分配NA?

标签 r if-statement na

我想对介于 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/

相关文章:

python - 如果用户在先前给定的列表中,则限制用户只能输入值

使用 replace_with_na 函数用 NA 替换范围外的值

r - 计算 R 中连续分布的 Anderson-Darling 检验统计量

r - Polars Rust Melt() 明显慢于 R stack()

r - 将向量写入垂直列中的文本文件

r - 从R中的函数绘制到文件

jQuery 如果复选框被选中

java - if 语句中的多个字符串条件

R:外部函数调用中的 NA/NaN/Inf (arg 1)

r - 使用 dplyr 过滤 data.frame 中的完整案例(按案例删除)