R基础运算无na.rm参数时将NA视为0且无需转0的简便方法
R中行级加减运算将NA临时视为0的简便方案
无需修改原始数据中的NA值,以下两种方案均满足高频运算需求:
- 基础R原生方案(无需预定义,适合偶尔使用)
直接调用自带rowSums()函数,利用其内置的na.rm参数实现运算时临时忽略NA(等价于视为0):# 两列相加示例,直接得到目标C列 hei$C <- rowSums(hei[, c("A", "B")], na.rm = TRUE) # 加减混合运算示例(如A - B),可通过调整列符号实现 hei$D <- rowSums(cbind(hei$A, -hei$B), na.rm = TRUE) - 高频运算专属方案(自定义运算符,写法和原生加减几乎一致)
提前一次定义中缀运算符,后续所有同类运算都可以用极简写法调用:
运行上述代码后得到的结果完全符合预期:# 定义加法运算符,运算时NA视为0,不修改原数据 `%+0%` <- function(x, y) rowSums(cbind(x, y), na.rm = TRUE) # 定义减法运算符 `%-0%` <- function(x, y) rowSums(cbind(x, -y), na.rm = TRUE) # 调用示例,写法和原生加减几乎无差异 hei$C <- hei$A %+0% hei$BA B C 1 1 1 2 2 2 2 4 3 3 NA 3 4 4 4 8
内容的提问来源于stack exchange,提问作者thomas.diridondo
相关产品推荐
相关产品推荐

