r - 如何在 ifelse 语句中忽略 NA

标签 r conditional-statements

我从 SAS 来到 R,其中数字缺失设置为无穷大。所以我们只能说:

positiveA = A > 0;

在 R 中,我必须像以下内容一样冗长:
positiveA <- ifelse(is.na(A),0, ifelse(A > 0, 1, 0))

我发现这种语法很难阅读。无论如何我可以修改 ifelse 函数以将 NA 视为一个特殊值,该值对于所有比较条件始终为假?如果没有,将 NA 视为 -Inf 也可以。

同样,在字符变量的 ifelse 语句中将 NA 设置为 ''(空白)。

谢谢。

最佳答案

此语法更易于阅读:

x <- c(NA, 1, 0, -1)

(x > 0) & (!is.na(x)) 
# [1] FALSE  TRUE FALSE FALSE

(外括号不是必需的,但对于机器以外的几乎任何人来说,这将使语句更容易阅读。)

编辑 :
## If you want 0s and 1s
((x > 0) & (!is.na(x))) * 1
# [1] 0 1 0 0

最后,你可以把整个事情变成一个函数:
isPos <- function(x) {
    (x > 0) & (!is.na(x)) * 1
}

isPos(x)
# [1] 0 1 0 0

关于r - 如何在 ifelse 语句中忽略 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598511/

相关文章:

R 用于点击光栅图像时进行传单重定向

wordpress - 检查 WooCommerce 中是否应用了任何优惠券代码

arrays - 用于计算百分位数的条件数组

c# - .NET 4 的条件编译

c++ - 宏可以在 #if 中与非数值进行比较吗

r - 使用 Dplyr 查找数字是否减少或增加的差异

r - 带有 log1p 转换的annotation_logticks

jquery - 根据选择启用/禁用其他元素

R2WinBUGS - 使用模拟数据进行逻辑回归

r - 如何运行函数并忽略缺失值,而不是整个观察?