R语言传入数据框列名计算缺失值占比函数出错求助
问题分析与解决
你的函数返回0的核心原因是提取列的方式错误:
df[col_Name]返回的是一个仅含目标列的数据框,length(df[col_Name])得到的是列数(固定为1),和该列的行数、缺失值数量完全无关。na.omit(df[col_Name])返回的仍是数据框,length同样为1,所以计算时差值永远是0,结果自然为0。
修复后的函数
方法1:修正列提取方式
把df[col_Name]换成df[[col_Name]],这样直接提取列对应的向量,length会返回该列的实际行数:
Pourcentage_NA = function(df, col_Name){ col_vector = df[[col_Name]] res = 100 * (length(col_vector) - length(na.omit(col_vector))) / length(col_vector) return(res) # 原函数遗漏return语句,显式返回结果更稳妥 }
方法2:更简洁高效的实现(推荐)
直接用sum(is.na())统计缺失值数量,逻辑更直观:
Pourcentage_NA = function(df, col_Name){ 100 * sum(is.na(df[[col_Name]])) / nrow(df) }
测试示例:假设Data的A列有3个缺失值、共10行,调用Pourcentage_NA(Data, "A")会返回30,符合预期。
内容的提问来源于stack exchange,提问作者Keynan Mahamoud
相关产品推荐
相关产品推荐

