如何用R检查每行pred与obs值是否相等并计算准确率?
嘿,这个需求在模型评估里太常见啦,用R实现起来非常直观,我给你分享几种实用的方法,你可以根据自己的习惯选:
1. 基础原生R写法(无需额外包)
先假设你的数据框叫df,我们先构造和你示例类似的数据来演示:
# 构造示例数据(对应你说的5行3匹配的情况) df <- data.frame( obs = c(1, 2, 3, 4, 5), pred = c(1, 2, 4, 4, 6) )
然后直接计算准确率:
# 计算匹配比例并转成百分比 accuracy <- mean(df$pred == df$obs) * 100 # 格式化输出结果 cat(sprintf("准确率:%.1f%%\n", accuracy))
原理很简单:df$pred == df$obs会生成一个由TRUE/FALSE组成的逻辑向量,mean()函数对逻辑向量计算时,会把TRUE当作1、FALSE当作0,所以直接取均值就是匹配的比例,乘以100就得到百分比啦。
2. 用dplyr的管道式写法(适合数据处理流)
如果你平时习惯用dplyr做数据处理,这种写法更贴合你的工作流:
# 先加载dplyr包(如果没装的话先运行install.packages("dplyr")) library(dplyr) df %>% # 新增一列标记每行是否匹配 mutate(is_match = pred == obs) %>% # 计算整体匹配率 summarise(accuracy = mean(is_match) * 100)
运行后会返回一个包含准确率的数据框,方便你和其他统计结果整合。
小提示:处理缺失值
如果你的数据里有NA(缺失值),记得加上na.rm = TRUE参数,避免缺失值干扰计算结果:
# 带缺失值处理的写法 accuracy <- mean(df$pred == df$obs, na.rm = TRUE) * 100
内容的提问来源于stack exchange,提问作者etuo
相关产品推荐
相关产品推荐

