如何在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
相关产品推荐
相关产品推荐

