Home Forum Statistica con R ordinamento variabili di dataframe

This topic contains 4 replies and has 2 voices.

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #5456

    cerzza
    Participant

    Salve a tutti,
    ho un data frame composto, come riportato sotto, vorrei ordinare le variabili dalla “CL1″ alla “CL31″ in ordine crescente, ho provato con order, ma non riesco a fargli selezionare solo quelle variabili.
    Un aiuto è molto apprezzato
    Una delle prove che ho fatto è questa:
    o1<- sacamp[order(sacamp[,3:33])]

    `> head(sacamp)
    id date CL1 CL10 CL11 CL12 CL13 CL14 CL15 CL16 CL17 CL18 CL19 CL2 CL20 CL21 CL22 CL23 CL24
    1 iicamp 2017-07-14 09:13:00 37020 25350 14780 7930 2030 660 730 300 130 120 70 170 50 60 30 24 4
    2 iicamp 2017-07-14 09:14:00 33380 24660 14090 7410 1800 640 800 270 120 180 120 130 60 20 73 55 16
    3 iicamp 2017-07-14 09:15:00 32110 24170 13440 6860 1830 640 650 270 80 160 120 80 60 70 61 23 6
    4 iicamp 2017-07-14 09:16:00 34780 24750 13200 7660 2140 620 670 300 80 180 170 110 50 20 41 38 11
    5 iicamp 2017-07-14 09:17:00 33570 23940 13360 7100 1690 510 720 250 150 200 90 130 80 60 29 24 11
    6 iicamp 2017-07-14 09:18:00 33190 23520 12890 7710 2090 830 770 250 160 120 170 80 70 70 129 75 12
    CL25 CL26 CL27 CL28 CL29 CL3 CL30 CL31 CL4 CL5 CL6 CL7 CL8 CL9 temp hum pres batt motcur errcod
    1 6 6 2 2 0 0 2 2 0 0 0 2 0 0 26.9 58.5 1003.1 130 55 0
    2 14 12 8 0 0 0 0 0 2 0 0 0 0 0 27.1 58.0 1003.1 130 51 0
    3 12 10 6 0 0 2 0 0 0 0 0 0 0 0 27.2 56.8 1003.1 130 49 0
    4 4 6 0 0 0 0 0 0 0 0 0 0 0 0 27.2 56.6 1004.8 130 49 0
    5 2 12 2 0 0 0 0 0 0 0 0 0 0 0 27.4 55.3 1004.8 130 48 0
    6 2 10 0 0 0 2 0 0 0 0 0 0 0 0 27.4 55.2 1004.8 130 48 0′

    #5457
    Davide Massidda
    Davide Massidda
    Moderator

    Il fatto è che order consente di ordinare le righe a seconda del valore assunto da una colonna. E comunque: com’è possibile ordinare le colonne? Già solo per il fatto che sono “variabili”, significa che assumono dei valori non costanti, quindi l’ordinamento non dovrebbe essere possibile.

    Prendi per esempio questa tabella:

    A B C
    1 2 3
    2 5 6
    4 3 5

    Come potresti ordinare le colonne, se B > A nelle prime due righe, ma B < A nella terza riga?
    Al massimo, potresti ordinare le colonne sulla base dei valori che esse assumono in una riga, ma non in più righe.

    #5458

    cerzza
    Participant

    Ciao Davide,
    quando ho scritto ordinare le variabili, intendevo dire, il nome delle variabili.
    Infatti, come vedi sotto ho cercato di correggere:
    o1<- sacamp[,order(colnames(sacamp))]

    ottenendo solo l’ordinamento alfabetico, ma neanche nel modo corretto:
    ` batt CL1 CL10 CL11 CL12 CL13 CL14 CL15 CL16 CL17 CL18 CL19 CL2 CL20 CL21 CL22 CL23 CL24 CL25 CL26 CL27 CL28 CL29
    1 130 37020 25350 14780 7930 2030 660 730 300 130 120 70 170 50 60 30 24 4 6 6 2 2 0
    2 130 33380 24660 14090 7410 1800 640 800 270 120 180 120 130 60 20 73 55 16 14 12 8 0 0
    3 130 32110 24170 13440 6860 1830 640 650 270 80 160 120 80 60 70 61 23 6 12 10 6 0 0
    4 130 34780 24750 13200 7660 2140 620 670 300 80 180 170 110 50 20 41 38 11 4 6 0 0 0
    5 130 33570 23940 13360 7100 1690 510 720 250 150 200 90 130 80 60 29 24 11 2 12 2 0 0
    6 130 33190 23520 12890 7710 2090 830 770 250 160 120 170 80 70 70 129 75 12 2 10 0 0 0
    CL3 CL30 CL31 CL4 CL5 CL6 CL7 CL8 CL9 date errcod hum id motcur pres temp
    1 0 2 2 0 0 0 2 0 0 14/07/2017 9.13.00 0 58.5 iicamp 55 1003.1 26.9
    2 0 0 0 2 0 0 0 0 0 14/07/2017 9.14.00 0 58.0 iicamp 51 1003.1 27.1
    3 2 0 0 0 0 0 0 0 0 14/07/2017 9.15.00 0 56.8 iicamp 49 1003.1 27.2
    4 0 0 0 0 0 0 0 0 0 14/07/2017 9.16.00 0 56.6 iicamp 49 1004.8 27.2
    5 0 0 0 0 0 0 0 0 0 14/07/2017 9.17.00 0 55.3 iicamp 48 1004.8 27.4
    6 2 0 0 0 0 0 0 0 0 14/07/2017 9.18.00 0 55.2 iicamp 48 1004.8 27.4′

    #5459
    Davide Massidda
    Davide Massidda
    Moderator

    Aspetta aspetta, a me il comando pare corretto, e pure il risultato! La sequenza:
    batt CL1 CL10 CL11 CL12 CL13 CL14 CL15 CL16 CL17 CL18 CL19 CL2 CL20 CL21 CL22 CL23 CL24 CL25 CL26 CL27 CL28 CL29
    è in ordine alfabetico. Forse tu vorresti per es. che CL2 sia disposto prima di CL19, perché 2 è minore di 19, giusto? Questo la funzione order non lo può fare e l’operazione è piuttosto articolata, perché bisogna scorporare dai nomi di colonna la parte numerica, valutarne l’ordinamento a prescindere dalla parte testuale e contemporaneamente valutare l’ordinamento anche della parte testaule, quindi rimescolare tutto insieme.

    Quello che vuoi fare è molto complicato e penso che sia impossibile scrivere un codice generico. Questo dovrebbe adattarsi alla struttura del tuo data frame:

    cn <- colnames(sacamp)
    ord <- c(1,order(as.numeric(substr(cn[-1],3,nchar(cn[-1]))))+1)
    sacamp[,ord]
    #5463

    cerzza
    Participant

    Ciao Davide,
    ho provato il codice, l’ordinamento del nome delle variabili va bene, anceh se preferirei avere la colonna “date” come seconda colonna, ma c’è una qualche gestione delle informazione dei valori delle variabili.
    Cerco di capire, e magari riesco a darti una spiegazione migliore, cosicchè tu possa aiutarmi al meglio.

    Grazie

Viewing 5 posts - 1 through 5 (of 5 total)

You must be logged in to reply to this topic.