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

