#r #r-exams
#r #r-экзамены
Вопрос:
Мы провели пять exams2nops
экзаменов, используя одни и те же группы предметов в рандомизированном порядке. Все они были элементами schoice. Таким образом, *.rds
было получено пять разных файлов, каждый из которых будет использоваться с соответствующими отсканированными экзаменами. Я заметил, что в тех *.rds
файлах, которые будут использоваться в nops_eval
, есть информация о том *.rmd
, что использовалось для создания вопроса этого экзамена. Например.:
Однако после создания nops_eval.csv
эта информация теряется. Я хотел бы объединить все пять nops_eval.csv
файлов, используя *.rmd
информацию, соответствующую каждому вопросу. Поскольку один и тот же вопрос (например, упражнение 22) может быть получен из разных *.rmd
файлов. Все те же 22 *.rmd
файла использовались на всех экзаменах (все имеют одинаковые 22 вопроса, но в разных порядках.
Я хотел бы получить фрейм данных с объединенным csv, чтобы я мог проводить анализ теории ответов элементов и моделирования по Рашу.
Ответ №1:
Да, вы можете объединить информацию из файлов CSV, изменив их порядок на основе информации о файле / имени из файлов RDS. Ниже я проиллюстрирую, как это сделать, используя check.*
столбцы из файлов CSV. Обычно они ближе всего к тому, что мне нужно для проведения анализа IRT.
Сначала вы читаете CSV и RDS из первой версии экзамена:
eval1 <- read.csv2("/path/to/first/nops_eval.csv", dec = ".")
metainfo1 <- readRDS("/path/to/first/exam.rds")
Затем вы извлекаете только check.*
столбцы и используете имена файлов упражнений в качестве имен столбцов.
eval1 <- eval1[, paste0("check.", 1:length(metainfo1[[1]]))]
names(eval1) <- sapply(metainfo1[[1]], function(x) x$metainfo$file)
Я использую $file
здесь, потому что он всегда уникален для всех упражнений. Если $name
в вашем случае он также уникален и имеет лучшие метки, вы также можете использовать его вместо этого.
Затем вы делаете то же самое для второй версии экзамена:
eval2 <- read.csv2("/path/to/second/nops_eval.csv", dec = ".")
metainfo2 <- readRDS("/path/to/second/exam.rds")
eval2 <- eval2[, paste0("check.", 1:length(metainfo2[[1]]))]
names(eval2) <- sapply(metainfo2[[1]], function(x) x$metainfo$file)
Если при построении двух версий использовались одни и те же упражнения, имена столбцов eval1
и eval2
совпадают, просто в другом порядке. Тогда вы можете просто сделать
eval2 <- eval2[, names(eval1)]
изменить порядок столбцов eval2
, чтобы они соответствовали eval1
столбцам . Впоследствии вы можете сделать:
eval <- rbind(eval1, eval2)
Если у вас более двух версий экзамена, вы просто повторяете один и тот же код и rbind()
все вместе в конце.
Аналогичный код также можно использовать, если упражнения лишь частично перекрываются между версиями упражнения. В этом случае я сначала создаю достаточно большую NA
матрицу с объединенными именами файлов упражнений, а затем вставляю результаты:
n1 <- nrow(eval1)
n2 <- nrow(eval2)
nam <- unique(c(names(eval1), names(eval2)))
eval <- matrix(NA, nrow = n1 n2, ncol = length(nam))
colnames(eval) <- nam
eval[1:n1, names(eval1)] <- as.matrix(eval1)
eval[(n1 1):(n1 n2), names(eval2)] <- as.matrix(eval2)
Опять же, вам нужно будет выполнить соответствующую итерацию, чтобы объединить более двух версий.
В любом случае результат eval
может быть обработан далее, чтобы стать матрицей IRT для последующего анализа.