【问题标题】:Replace Numeric values with NA用 NA 替换数值
【发布时间】:2019-03-14 16:41:15
【问题描述】:

我正在编写一个函数,该函数接受一些向量并检查它是否为数字。如果为假,它将在 else 语句中将数值替换为 NA。我尝试过以多种方式使用 is.numeric() 函数,但运气不佳。任何帮助,将不胜感激!

test <- function(x){


if(is.numeric(x) == TRUE){
  mean.x <- mean(x)
  vectorlist <- list(mean.x)
  }
else

return(vectorlist)
}
x <- c("a", 1, 2)
test(x)

【问题讨论】:

  • 所以我认为这里的基本误解是向量只能包含单一类型的元素。您可以键入x &lt;- c("a", 1, 2),但如果您检查,结果是所有字符。因此,如果is.numeric(x) 为 TRUE,则所有元素都是数字。
  • 如果向量包含除 I 号以外的任何内容,我不希望它取平均值。所以,如果我用 x 运行它,我希望它返回 "a" NA NA
  • 好的,但您确实意识到x 由三个字符、“a”、“1”和“2”组成。不是1号还是2号?您的评论似乎暗示您真正想要的是获取一个向量,如果它不是数字,请将所​​有 可以转换 的值替换为带有 NA 的数字?
  • ...例如,您似乎在描述这样的内容:x[!is.na(as.numeric(x))] &lt;- NA
  • 是的,它将其余的值转换为第一个值的类型对吗?这就是我想做的。

标签: r


【解决方案1】:

听起来你正在寻找一个大致像这样的函数:

test <- function(x){
    if(is.numeric(x)){
        return(mean(x))
    }
    else{
        x[!is.na(as.numeric(x))] <- NA
        return(x)
    }
}
x <- c("a", 1, 2)
test(x)

注意if (is.numeric(x)) 就足够了,if 子句中不需要== TRUE 的东西。

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2015-04-26
    • 2014-11-30
    • 2011-12-05
    相关资源
    最近更新 更多