Home Forum Statistica con R Divisione liste con R

This topic contains 3 replies and has 2 voices.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #4676

    Frankie89
    Participant

    Buona sera a tutti, vi spiego quello che dovrei fare per l’università.
    Ho una tabella in Excel con messi in colonna nomi cognomi e una colonna di numeri 1 oppure 2, quindi sono 3 colonne e diverse righe.
    Devo importare la tabella in R e fare in modo che i nomi e cognomi che hanno associato il numero 1 vanno a finire in una lista, mentre quelli che hanno il numero 2 in un altra lista.
    Poi devo riuscire ad invertire la cosa, cioè automaticamente il programma dovrebbe trasformare il numero 1 in numero 2 e viceversa, in modo da poter creare sempre due liste ma invertite.

    Vi posto il file di testo CSV aperto con Notepad++
    COGNOME E NOME,TURNO
    Baglio Aldo ,1
    Balestrini Chiara,1
    Benelli Alessio,2
    Bianchi Gaia,2
    Coppola Alfonso,2
    De Ceglie Gianluca,1
    Fanucci Ciro,2
    Grassi Piero,1
    Mancini Alberto,2
    Piazza Remo,1
    Poretti Giacomo,1
    Rossi Mario,1
    Schiavone Alberto,2
    Spano Francesco,1
    Verdi Giuseppe,1
    Vitiello Luigi,2

    Grazie anticipatamente e buona serata

    #4677

    Frankie89
    Participant

    Scusate, non ho specificato.. non so come fare questa operazione, riesco solo ad importare il file csv con:
    > dati<- data.frame(read.csv(“elenco turnisti.csv”))
    > dati
    COGNOME.E.NOME TURNO
    1 Baglio Aldo 1
    2 Balestrini Chiara 1
    3 Benelli Alessio 2
    4 Bianchi Gaia 2
    5 Coppola Alfonso 2
    6 De Ceglie Gianluca 1
    7 Fanucci Ciro 2
    8 Grassi Piero 1
    9 Mancini Alberto 2
    10 Piazza Remo 1
    11 Poretti Giacomo 1
    12 Rossi Mario 1
    13 Schiavone Alberto 2
    14 Spano Francesco 1
    15 Verdi Giuseppe 1
    16 Vitiello Luigi 2

    posso fare in modo che se il valore della prima colonna è 1, il nome vada in una lista1 mentre se è 2 il nome va in una lista2?
    Poi è possibile invertire 1 con 2 e viceversa?

    #4678
    Davide Massidda
    Davide Massidda
    Moderator

    Ciao, la prima operazione la puoi svolgere tranquillamente utilizzando il comando split:

    dati <- read.csv("elenco turnisti.csv")
    dati.list <- split(dati, f=dati$TURNO)

    Non mi è chiara invece la seconda operazione. Tu vuoi che i nomi dei due slot della lista risultino invertiti, oppure vuoi che a essere invertiti siano i dati sotto la colonna TURNO?
    Io comunque aggirerei il problema, prima invertendo i dati (1 diventa 2 e 2 diventa 1) e solo poi trasformerei il tutto in una lista, in questo modo:

    dati <- read.csv("elenco turnisti.csv")
    dati$TURNO <- abs(dati$TURNO-2)+1
    dati.list <- split(dati, f=dati$TURNO)
    
    #4679

    Frankie89
    Participant

    sono riuscito a fare tutto tranne la rotazione dei turni, adesso aspetto che il professore mi risponda, comunque io dovrei mantenere inalterata la lista di nomi mentre devo cambiare la lista di numeri e basta, come dicevi tu 1 diventa 2 e viceversa. Preciso che alla fine ho lavorato con un txt non con un csv.
    Grazie comunque davvero per la risposta.
    A scopo informativo posto lo script di R che ho fatto.

    #importiamo i dati di EXCEL in R , specificando che nella prima riga ci sono i nomi delle colonne

    dati<- read.table(‘turnisti.txt’, header=T)

    #visualizziamo i dati appena importati

    dati

    #creiamo un data frame con la nostra tabella

    X<- data.frame(dati)

    #visualizziamo il nostro data frame

    X

    #creiamo una lista1 con le persone che fanno il turno 1 visualizzando il cognome e il nome

    lista1<- list(X[X$TURNO==1,c("COGNOME","NOME")])

    #visualizziamo la lista1

    lista1

    #salviamo la lista1 in un file di testo, specificando di non volere le virgolette tra i caratteri, di non volere le righe e le colonne di intestazione

    write.table(lista1, file=”lista1.txt”, quote=F, row.names=F, col.names=F)

    #creiamo una lista2 con le persone che fanno il turno 2 visualizzando il cognome e il nome

    lista2<- list(X[X$TURNO==2,c("COGNOME","NOME")])

    #visualizziamo la lista2

    lista2

    #salviamo la lista2 in un file di testo, specificando di non volere le virgolette tra i caratteri, di non volere le righe e le colonne di intestazione

    write.table(lista2, file=”lista2.txt”, quote=F, row.names=F, col.names=F)

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

You must be logged in to reply to this topic.