You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:计算实际值与多列预测值的列间不匹配次数之和

解决R中统计实际值与多列预测值不匹配次数的问题

嗨,作为R新手遇到这类问题完全正常,我们一步步来搞定它!首先,先确认你的数据结构,我先把你给出的数据框重现出来方便测试:

df <- data.frame(
  actual = c("a", "a", "b", "b", "a", "c", "c", "d"),
  predicted.1 = c("a", "a", "b", "b", "b", "c", "c", "c"),
  predicted.2 = c("a", "a", "b", "a", "b", "c", "d", "d"),
  predicted.3 = c("a", "b", "a", "b", "c", "c", "d", "d"),
  predicted.4 = c("a", "b", "b", "b", "c", "d", "d", "a"),
  stringsAsFactors = FALSE
)

你的需求是统计每一列预测值与实际值的不匹配次数,预期结果c(2,1,2,4),这个需求其实可以用**colSums()**高效实现,这是处理这类列级求和最简洁的方式。

正确的实现代码

# 提取所有预测列(排除第一列的actual)
prediction_columns <- df[, -1]

# 计算每列与actual的不匹配次数
discordant_sums <- colSums(prediction_columns != df$actual)

# 查看结果
discordant_sums

运行这段代码后,你会得到和预期完全一致的输出:

predicted.1 predicted.2 predicted.3 predicted.4 
          2           1           2           4 

代码解释

  1. prediction_columns != df$actual:R会自动做广播匹配,把df$actual这个向量和预测列的每一列逐一比较,生成一个8行4列的逻辑矩阵,其中TRUE表示不匹配,FALSE表示匹配。
  2. colSums():对这个逻辑矩阵的每一列求和(R中TRUE等价于1,FALSE等价于0),直接得到每列的不匹配次数。

你之前代码的问题

你写的discordant_sums(df[,seq(1,ncol(df),2)]!=,df[,seq(2,ncol(df),2)])有两个明显问题:

  • 语法错误:!=后面多了个逗号,导致代码无法运行;
  • 列选择错误:seq(1,ncol(df),2)会选取第1、3、5列,这并不是实际值和对应预测值的正确配对(实际值只有第1列,预测值是第2-5列)。

另一种可选方法(用apply())

如果你想用apply()来实现,代码也很直观,不过效率上colSums()会更高一些:

discordant_sums <- apply(prediction_columns, 2, function(col) {
  sum(col != df$actual)
})

希望这个解决方案能帮你顺利推进项目!

内容的提问来源于stack exchange,提问作者Kevin E Dow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:16:49