R语言实现自定义NA求和规则:仅两NA相加返回NA的列两两求和方法
R自定义NA规则的两两列求和实现
核心逻辑
你需要的求和规则本质是:仅当配对的两个元素均为NA时返回NA,其余场景将NA替换为0后求和即可匹配要求。
基础R实现代码
你可以直接用mapply配对列调用自定义求和函数,代码如下:
# 提取奇数/偶数列 odd_df <- M[c(TRUE, FALSE)] even_df <- M[c(FALSE, TRUE)] # 自定义符合规则的逐元素求和函数 pair_sum <- function(a, b) { ifelse(is.na(a) & is.na(b), NA, replace(a, is.na(a), 0) + replace(b, is.na(b), 0)) } # 逐列配对计算 M_final <- as.data.frame(mapply(pair_sum, odd_df, even_df)) # 保留原奇数列的列名 colnames(M_final) <- colnames(odd_df)
如果你使用R4.1及以上版本,可以简化为一行代码:
M_final <- as.data.frame(mapply(\(x,y) ifelse(is.na(x)&is.na(y),NA,replace(x,is.na(x),0)+replace(y,is.na(y),0)), M[c(T,F)], M[c(F,T)]))
输出结果
运行上述代码后输出的M_final和你给出的预期结果完全一致:
V1 V3 V5 V7 V9 1 0 1 2 1 1 2 1 1 1 2 1 3 0 0 1 1 1 4 0 1 2 1 1 5 1 0 1 1 0 6 1 0 1 2 1 7 1 2 2 2 0 8 1 0 2 0 1 9 2 1 1 1 1 10 1 2 NA 2 1
内容的提问来源于stack exchange,提问作者ana_gg
相关产品推荐
相关产品推荐

