R包hydroGOF中的rmse()函数有一个NA-remove参数:
# require(hydroGOF)
rmse(sim, obs, na.rm=TRUE, ...)
根据文档,当na.rm
为 TRUE 时,它会达到预期的效果:
“当在 obs OR sim 的第 i 个位置找到 'NA' 值时,在计算之前删除 obs AND sim 的第 i 个值。”
如果没有最小的可重现示例,很难说为什么这对您不起作用。
如果您想在输入 hydroGOF::rmse() 函数之前消除缺失值,您可以执行以下操作:
my.rmse <- rmse(df.sim[rownames(df.obs[!is.na(df.obs$col_with_missing_data),]),]
, df.obs[!is.na(df.obs$col_with_missing_data),])
假设您分别在名为 df.sim 和 df.obs 的不同数据框中有“模拟”(估算)和“观察”(原始)数据集,它们是从相同的原始数据框创建的,因此具有相同的维度和行名字。
如果您有多个缺少数据的列,这是一种执行相同操作的规范方法:
rows.wout.missing.values <- with(df.obs, rownames(df.obs[!is.na(col_with_missing_data1) & !is.na(col_with_missing_data2) & !is.na(col_with_missing_data3),]))
my.rmse <- rmse(df.sim[rows.wout.missing.values,], df.obs[rows.wout.missing.values,])