将NA插入数组中

时间:2013-07-22 16:22:23

标签: arrays r matrix

我正试图找到一种方法将NA值插入到R中的向量/矩阵中。我使用了一些操作技巧,如:

    values = *expression* #assume values is a populated vector
    values = (values %% 2 == 0)(values/2) + (values%%2 == 1)*(3*values + 1)

所以,这有条件地根据它们的值来操纵向量的条目,但是我不确定在插入NA值时如何做这种类型的方法,因为类似values = (values %% 2 == 0)*(values) + (values%%2 == 1)*(NA)之类的东西除了NA之外什么都不会产生矢量。

我发现我可以做以下事情:

    for(i in 1:length(values))
    {
        if(values[i] %% 2 == 1){values[i] = NA}
    }

但是我希望能像前面的例子一样更简洁。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

像这样?

v = (values %% 2 == 0)*(values/2) + ifelse(values%%2 == 1, NA, 0)

实际上写起来更安全:

v = ifelse(values %% 2 ==0, values/2, 0) + ifelse(values%%2 == 1, NA, 0)

答案 1 :(得分:1)

values[values %% 2 == 1] <- NA

答案 2 :(得分:1)

你不需要使用技巧和总结任何东西,这就足够了:

values = ifelse(values %% 2 == 0, values/2, NA)