R语言函数入参为NA时如何忽略对应过滤条件计算子集均值
修改方案
你只需要调整filter内的判断逻辑,给每个过滤条件增加参数是否为NA的判断:当对应参数为NA时,该条件返回TRUE,等同于跳过该维度的过滤。
修改后的完整函数代码如下:
my_subset_mean <- function(r1, r2, r3){ subset <- df %>% filter( # r1为NA时跳过a列过滤 is.na(r1) | a %in% r1, # r2为NA时跳过b列过滤 is.na(r2) | b > r2, # r3为NA时跳过d列过滤 is.na(r3) | d < r3 ) # 加na.rm=TRUE可以避免子集为空/存在NA时返回NaN,不需要可以去掉 return(mean(subset$c, na.rm = TRUE)) }
效果验证
你给出的3个调用示例都可以正常运行得到对应结果:
- 示例1:忽略a列过滤,仅筛选
b > 5且d < 1的行计算c列均值 - 示例2:忽略b列过滤,仅筛选
a %in% c("a","b")且d < 1的行计算c列均值 - 示例3:忽略a、d列过滤,仅筛选
b >5的行计算c列均值
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

