У меня есть два больших набора данных, и я пытаюсь переформатировать старый набор данных, чтобы расположить вопросы в том же порядке, что и новый набор данных (чтобы я мог легко выполнить t-тесты для каждого идентичного вопроса, чтобы отследить значительные изменения в течение 2 лет между наборами данных). Новая версия одновременно удаляла и добавляла вопросы при переходе со старой версии.
Способ, которым я пытался это сделать, R продолжает падать из-за того, что, насколько я могу судить, векторы слишком велики. Я не уверен, как они становятся такими большими, как бы то ни было! Вот что я делаю:
Оба набора данных имеют одинаковый формат. Оригинальные наборы 415 для новых и 418 для старых. Я хочу сопоставить первые примерно 158 столбцов нового набора данных со старыми. Каждый набор данных имеет имена столбцов q1-q415, а данные в каждом столбце числовые 1-5 или NA. На вопрос / столбец приходится около 100 ответов, в старом наборе данных больше респондентов (140 строк в старом и 114 в новом). Пример ниже (но имейте в виду, что в полном наборе более 400 столбцов и более 100 строк!)
Ниже приведен пример того, как выглядит data.old. data.new выглядит так же, только data.new имеет больше строк числа / ответов. Здесь я показываю вопросы с 1 по 20 и первые 10 строк.
data.old = 418 столбцов (от q1 до q418) x 140 строк
data.new = 415 столбцов (от q1 до q415) x 114 строк
Мне нужно сопоставить первые 170 столбцов data.old с первыми 157 столбцами data.new
Для этого я буду удалять 17 столбцов из data.old (вопросы, которые были в вопроснике data.old и удалены из вопросника data.new), а также добавляю 7 новых столбцов в data.old (который будет содержать NA). . заполнители, для которых в data.new были введены новые вопросы, которых не было в вопроснике data.old)
>data.old
q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20
1 3 4 3 3 5 4 1 NA 4 NA 1 2 NA 5 4 3 2 3 1
3 4 5 2 2 4 NA 1 3 2 5 2 NA 3 2 1 4 3 2 NA
2 NA 2 3 2 1 4 3 5 1 2 3 4 3 NA NA 2 1 2 5
1 2 4 1 2 5 2 3 2 1 3 NA NA 2 1 5 5 NA 2 3
4 3 NA 2 1 NA 3 4 2 2 1 4 5 5 NA 3 2 3 4 1
5 2 1 5 3 2 3 3 NA 2 1 5 4 3 4 5 3 NA 2 NA
NA 2 4 1 5 5 NA NA 2 NA 1 3 3 3 4 4 5 5 3 1
4 5 4 5 5 4 3 4 3 2 5 NA 2 NA 2 3 5 4 5 4
2 2 3 4 1 5 5 3 NA 2 1 3 5 4 NA 2 3 4 3 2
2 1 5 3 NA 2 3 NA 4 5 5 3 2 NA 2 3 1 3 2 4
Таким образом, в новом наборе некоторые вопросы были удалены, некоторые новые были добавлены, а некоторые изменили порядок, поэтому я просмотрел и создал подмножества старых данных в том порядке, в котором мне нужно было бы объединить их снова, чтобы соответствовать новый набор данных. Когда вопрос не существует в старом наборе данных, я хочу использовать вопрос в новом наборе данных, чтобы я (теоретически) мог выполнить свои t-тесты в большом цикле.
dataold.set1 <- dataold[1:16]
dataold.set2 <- dataold[18:19]
dataold.set3 <- dataold[21:23]
dataold.set4 <- dataold[25:26]
dataold.set5 <- dataold[30:33]
dataold.set6 <- dataold[35:36]
dataold.set7 <- dataold[38:39]
dataold.set8 <- dataold[41:42]
dataold.set9 <- dataold[44]
dataold.set10 <- dataold[46:47]
dataold.set11 <- dataold[49:54]
dataold.set12 <- datanew[43:49]
dataold.set13 <- dataold[62:85]
dataold.set14 <- dataold[87:90]
dataold.set15 <- datanew[78]
dataold.set16 <- dataold[91:142]
dataold.set17 <- dataold[149:161]
dataold.set18 <- dataold[55:61]
dataold.set19 <- dataold[163:170]
Затем я пытался собрать столбцы обратно в один набор.
Я пробовал оба
dataold.adjust <- merge(dataold.set1, dataold.set2)
dataold.adjust <- merge(dataold.adjust, dataold.set3)
dataold.adjust <- merge(dataold.adjust, dataold.set4)
и я тоже попробовал
dataold.adjust <- cbind(dataold.set1, dataold.set2, dataold.set3)
Однако каждый раз, когда я пытаюсь выполнить эти функции, R зависает, а затем вылетает. Мне удалось заставить его отображать ошибку один раз, и он сказал, что он не может работать с вектором 10 Мб, а затем я получил несколько ошибок, включающих более 1000 Мб векторов. Я не совсем уверен, насколько велики мои векторы, когда он выходит из строя с помощью набора 3, который составляет всего 23 столбца данных в таблице, а наборы данных, которые я обычно использую, имеют длину более 400 столбцов.
Есть ли другой способ сделать это, чтобы не вызывать сбой моей программы и проблемы с памятью (и не требовало, чтобы я печатал имена столбцов более 100 столбцов), или здесь есть какой-то элемент кода, который Я скучаю, где я получаю раковину памяти? Я пытался изо всех сил стрелять в него и потратил час на то, чтобы разбить R, но безуспешно пытался понять, как это сделать.
Спасибо за помощь!