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

如何在R中拆分网格坐标并按顺序匹配计算测试正确得分列

嘿,这个需求我帮你搞定!要实现按顺序匹配网格坐标并计算得分,咱们分两步来:先把字符串里的每个grid坐标拆出来,再逐位置对比统计正确数量。下面是具体的R实现方案:

1. 加载必要的工具包

我们用dplyr处理数据框,stringr做字符串拆分,先把它们加载进来:

library(dplyr)
library(stringr)
2. 准备示例数据(你可以替换成自己的数据集)

先把你提供的示例数据转换成R能处理的数据框:

df <- tibble(
  Recall.CRESP = c("grid35grid51grid12grid43grid54", "grid11gird42gird22grid51grid32"),
  Recall.RESP = c("grid35grid51grid12grid43grid54", "grid11gird15gird55grid42grid32")
)
3. 核心:拆分字符串+按位置统计得分

用rowwise()逐行处理每一组答案,拆分出每个坐标后按位置对比,最后生成得分列:

df <- df %>%
  rowwise() %>%
  mutate(
    # 拆分正确答案里的所有grid坐标(兼容你示例里的gird拼写错误)
    correct_grids = list(str_extract_all(Recall.CRESP, "grid\\d+|gird\\d+")[[1]]),
    # 拆分参与者作答里的所有grid坐标
    resp_grids = list(str_extract_all(Recall.RESP, "grid\\d+|gird\\d+")[[1]]),
    # 统计按位置匹配的正确数量
    correct_count = sum(correct_grids == resp_grids, na.rm = TRUE),
    # 生成你要的"x/5"格式得分
    Score = paste0(correct_count, "/", length(correct_grids))
  ) %>%
  # 可选:移除中间临时列,让结果更整洁
  select(-correct_grids, -resp_grids)
运行结果

执行完代码后,你的数据框会变成这样:

# A tibble: 2 × 3
  Recall.CRESP                     Recall.RESP                      Score
  <chr>                           <chr>                           <chr>
1 grid35grid51grid12grid43grid54 grid35grid51grid12grid43grid54 5/5  
2 grid11gird42gird22grid51grid32 grid11gird15gird55grid42grid32 2/5  

小提示

如果你的数据里gird是拼写错误,记得先统一修正成grid,可以用这行代码预处理:

df <- df %>%
  mutate(across(c(Recall.CRESP, Recall.RESP), ~str_replace_all(., "gird", "grid")))

内容的提问来源于stack exchange,提问作者Rboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:18