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

在R中自动化提取非结构化数据集与ID关联的score信息

非结构化R数据框自动提取分数方案

直接上可落地的代码和步骤,解决你手动指定行号的问题:

步骤1:加载依赖包

library(dplyr)
library(tidyr)

步骤2:提取学生ID和有效题目分数

假设你的数据框df里有一列(比如叫text_col)存着所有非结构化内容,先过滤出有效行:

# 抓出所有学生ID行,提取ID值
student_ids <- df %>%
  filter(grepl("Student Study ID:", text_col)) %>%
  mutate(ID = trimws(gsub("Student Study ID: ", "", text_col))) %>%
  select(ID)

# 抓出带"Item "的行,同时排除含"..:Error"的错误行,提取itemID和分数
valid_items <- df %>%
  filter(grepl("Item ", text_col) & !grepl("..:Error", text_col)) %>%
  mutate(
    itemID = gsub("(Item \\d+).*", "\\1", text_col),
    score = as.numeric(gsub(".*Score: (\\d+)", "\\1", text_col))
  ) %>%
  select(itemID, score)

步骤3:整理成目标数据框

把ID和分数合并,转成宽表,再计算总分:

# 合并数据(如果一个ID对应多组题目,需要根据你的数据加分组逻辑,这里假设一一对应)
final_df <- cbind(student_ids, valid_items) %>%
  pivot_wider(names_from = itemID, values_from = score) %>%
  rowwise() %>%
  mutate(总分 = sum(c_across(starts_with("Item")), na.rm = TRUE)) %>%
  ungroup()

关键说明

  • 如果你的数据列名不是text_col,直接替换成实际列名就行
  • 正则表达式可以根据你实际的文本格式调整,比如如果分数的标注是得分: X,就把gsub里的Score:换成得分:
  • trimws是用来去掉ID前后的空格,避免不必要的格式问题
  • na.rm=TRUE是为了处理某些题目没有分数的情况,计算总分时自动忽略缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:05:42