【问题标题】:How to ignore NA when selecting values from a vector in R从 R 中的向量中选择值时如何忽略 NA
【发布时间】:2023-01-12 06:06:35
【问题描述】:

说我有

a <- c(0:3, NA)

我希望用 1 替换 0,用 0 替换 1。也就是说,我想要 a &lt;- c(1, 0, 2, 3, NA)。由于NA,以下代码不起作用

> a[a<2] <- 1- a[a<2]
Error in a[a < 2] <- 1 - a[a < 2] : 
  NAs are not allowed in subscripted assignments

我知道如果我们使用函数,我们可以使用na.rm = T。如何在我的案例中添加这样的论点?

【问题讨论】:

    标签: r


    【解决方案1】:

    只需使用 %in% 对值 0 和 1 进行子集化,然后从 1 中减去 - %in%NA 值返回 FALSE,并且仅对与 rhs 匹配的值返回 TRUE,然后我们减去 1,以便 1-1 = 0 并且1-0 = 1

    a[a %in% 0:1] <- 1 - a[a %in% 0:1]
    

    -输出

    > a
    [1]  1  0  2  3 NA
    

    【讨论】:

    • 精彩的。将在 11 分钟内接受为答案。
    • 不幸的是,这是非常神秘的代码:老实说,谁会明白这段代码是专门为处理 NA 而编写的?甚至专家也不一定会想到这一点。代码的语义(尤其是在令人惊讶的时候,例如处理 NA 时)应该是明确的以确保可维护性。
    • @KonradRudolph 这用于数据清理阶段,其中应切换 0 和 1。谢谢!
    • @JZ是的,但数据清理应该成为可读代码。如果你在两年内回到这段代码并且不再记得这里发生了什么,你会讨厌你以前的自己。相信我,我去过那里。聪明的代码是糟糕的代码。
    • @KonradRudolph 我同意。虽然我不希望第二个人会阅读我的代码,但您有其他方法吗?
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多