Изменение структуры фрейма данных с вертикального на горизонтальный - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть следующий фрейм данных (дБ):

STUDENT_ID / DESCRIPTION / TERM / ACH / MID / FINAL

STUDENT_ID - это номер студента

DESCRIPTION - этоназвание предмета

TERM - это термин, когда студент изучал предмет

ACH - это отметка достижений по этому предмету

MID - это отметка среднего уровня по этому предмету

ФИНАЛ - это отметка финала в этой теме

Я хочу создать новый фрейм данных с новой структурой следующим образом

Создан пустой фрейм данных (d)

Итак, я хочу заполнить (d) данными из (дБ)

student_no = STUDENT_NO

term = TERM

ach_m = ACH (гдеОПИСАНИЕ = МАТЕМАТИКА)

mid_m = MID (где ОПИСАНИЕ = МАТЕМАТИКА)

final_m = FINAL (где ОПИСАНИЕ = МАТЕМАТИКА)

и так далее для каждого предмета .... в то время как каждая строка для предмета в другом термине в (дБ), в (д)

будет толькоодна строка за семестр, заполненная всеми отметками предметов.

Таким образом, в общей сложности 6 записей на одного учащегося, когда студент изучал 6 терминов.

Это код, который я пробовал. Требуется слишком долгое время, чтобы извиниться, и результат копирует аналогичные значения столбца в 10 тысяч или более строк, но хорошо, что он находится в правильных столбцах (student_id, term) и, возможно, начинает заполнять один предмет, например ((ach_m,mid_m, final_m)):

for (i in seq(1, nrow(db),1)) {
    for (j in seq(1, nrow(d),1)) {
        if (str_detect(db[i,2] , "Arabic ") == TRUE) {
            d[j,1]  <- db[i,1]
            d[j,2]  <- db[i,3]
            d[j,15] <- db[i,4]
            d[j,16] <- db[i,5]
            d[j,17] <- db[i,6]
        }
        if (str_detect(db[i,2], "English ") == TRUE) {
            d[j,1]  <- db[i,1]
            d[j,2]  <- db[i,3]
            d[j,18] <- db[i,4]
            d[j,19] <- db[i,5]
            d[j,20] <- db[i,6]
        }
        if (str_detect(db[i,2], "Physics ") == TRUE) {
            d[j,1]  <- db[i,1]
            d[j,2]  <- db[i,3]
            d[j,12] <- db[i,4]
            d[j,13] <- db[i,5]
            d[j,14] <- db[i,6]
        }
        if (str_detect(db[i,2], "Chemistry ") == TRUE) {
            d[j,1] <- db[i,1]
            d[j,2] <- db[i,3]
            d[j,6] <- db[i,4]
            d[j,7] <- db[i,5]
            d[j,8] <- db[i,6]
        }
        if (str_detect(db[i,2], "Biology ") == TRUE) {
            d[j,1]  <- db[i,1]
            d[j,2]  <- db[i,3]
            d[j,9]  <- db[i,4]
            d[j,10] <- db[i,5]
            d[j,11] <- db[i,6]
        }
        if (str_detect(db[i,2], "Mathmatics.* ") == TRUE) {
            d[j,1] <- db[i,1]
            d[j,2] <- db[i,3]
            d[j,3] <- db[i,4]
            d[j,4] <- db[i,5]
            d[j,5] <- db[i,6]
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...