Каков наилучший способ преобразовать эти данные в широкий формат? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь преобразовать свои данные в широкую форму, но я новичок в этом, и пока обычная функция преобразования не работает. Когда я пытаюсь использовать полные данные (этот отрывок, похоже, работает), я получаю значения NA для всех моих значений, а имена столбцов превращаются в странные числовые векторы.

Мои данные выглядят так, PNR - это идентификаторпеременная, которая уникальна для каждого наблюдения.

    PNR ZIPCODE SEL_CRITERION   QUAL_RATING QUEUENUMBER UPSEC_ID    UPSEC_COURSE_ID MARK    COURSEOFFERING_ID   ADMISSIONROUND_ID   RESULT  WITHIN_PROGRAM  SUMMA
1234567890  46395   HB      55  0   HRF         SV203       G   97116   HT2019      20  0   67.5
1234567890  46395   HB      55  0   HRF         EN200       VG  97116   HT2019      20  0   67.5
1234567890  46395   HB      55  0   HRF         MA200       VG  97116   HT2019      20  0   67.5
1234567890  46395   HB      55  0   HRF         <null>  <null>  97116   HT2019      20  0   67.5
2345678901  42332   B5      2645    0   3SB         EN1201      VG  97116   HT2019      20  0   70.5
2345678901  42332   B5      2645    0   3SB         MA1201      VG  97113   HT2019      20  0   70.5
2345678901  42332   B5      2645    0   2SM         SV1201      VG  97113   HT2019      20  0   70.5

Я бы хотел, чтобы это выглядело примерно так:

PNR ZIPCODE      HB  B5   QUEUENUMBER UPSEC_ID SV203 EN200 MA200 <null> EN1201 MA1201 SV1201
1234567890 46395 95  NA    0           HRF      G     VG    VG    NA     NA     NA     NA
2345678901 42332 NA  1645  0           3SB      NA    NA    NA    NA     VG     VG     VG

Есть ли способ, которым я могу это сделать?

Я пыталсяиспользуйте обычную функцию изменения формы, которая с треском проваливается (но не обязательно в этом небольшом фрагменте):

test<-reshape(HT2018, idvar="PNR",timevar=c("SEL_CRITERION", "UPSEC_COURSE_ID"), v.names=c("QUAL_RATING","MARK"), direction = "wide")

Я также пробовал функции melt и cast из пакета reshape2, который возвращает одну строку с тремязначения (ни одно из них не является правильным), хотя я, конечно, могу делать что-то не так:

test<-melt(HT2018, id="PNR")
test<-cast(test, QUAL_RATING + MARK ~ PNR)

structure(list(PNR = c(1234567890, 1234567890, 1234567890, 1234567890, 
2345678901, 2345678901, 2345678901), ZIPCODE = c(46395L, 46395L, 
46395L, 46395L, 42332L, 42332L, 42332L), SEL_CRITERION = structure(c(2L, 
2L, 2L, 2L, 1L, 1L, 1L), .Label = c("B5", "HB   "), class = "factor"), 
    QUAL_RATING = c(55L, 55L, 55L, 55L, 2645L, 2645L, 2645L), 
    QUEUENUMBER = c(0L, 0L, 0L, 0L, 0L, 0L, 0L), UPSEC_ID = structure(c(2L, 
    2L, 2L, 2L, 1L, 1L, 1L), .Label = c("3SB", "HRF"), class = "factor"), 
    UPSEC_COURSE_ID = structure(c(7L, 3L, 5L, 1L, 2L, 4L, 6L), .Label = c("<null>", 
    "EN1201     ", "EN200      ", "MA1201     ", "MA200      ", 
    "SV1201     ", "SV203      "), class = "factor"), MARK = structure(c(2L, 
    3L, 3L, 1L, 3L, 3L, 3L), .Label = c("<null>", "G  ", "VG "
    ), class = "factor"), COURSEOFFERING_ID = c(97113L, 97113L, 
    97113L, 97113L, 97113L, 97113L, 97113L), ADMISSIONROUND_ID = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L), .Label = "HT2018    ", class = "factor"), 
    RESULT = c(20L, 20L, 20L, 20L, 20L, 20L, 20L), WITHIN_PROGRAM = c(0L, 
    0L, 0L, 0L, 0L, 0L, 0L), SUMMA = structure(c(1L, 1L, 1L, 
    1L, 2L, 2L, 2L), .Label = c("67.5", "70.5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-7L))

1 Ответ

1 голос
/ 15 октября 2019

В ожидании пояснения по агрегации значений HB / B5 (комментарий) вы можете использовать функцию data.table's dcast () для преобразования данных в широкоформатный формат на всех уровнях MARK уровня UPSEC_COURSE_ID.

dt = data.table(dt)
dt_betyg = dcast(dt, PNR + ZIPCODE + UPSEC_ID + QUEUENUMBER + SEL_CRITERION + QUAL_RATING ~ UPSEC_COURSE_ID, value.var = c('MARK'))

Результат

> dt_betyg
          PNR ZIPCODE UPSEC_ID QUEUENUMBER SEL_CRITERION QUAL_RATING <null> EN1201      EN200       MA1201      MA200       SV1201      SV203      
1: 1234567890   46395      HRF           0         HB             55 <null>        <NA>         VG         <NA>         VG         <NA>         G  
2: 2345678901   42332      3SB           0            B5        2645   <NA>         VG         <NA>         VG         <NA>         VG         <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...