Home Forum Statistica con R come creare una nuova variabile in un dataframe già esistente

Questo argomento contiene 14 risposte, ha 5 partecipanti, ed è stato aggiornato da  Antonio 2 settimane fa.

Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
  • Autore
    Articoli
  • #6856

    mattia29
    Partecipante

    Salve,
    sto analizzando dei dati dove è presente la variabile residenza, distinta in italiana e estera.
    Vorrei conoscere quanti di questi sono sardi quindi vorrei poter creare un ulteriore variabile che presenti tre modalità dove vengono conteggiati anche i sardi.
    come posso fare? nella variabile residenza sono presenti i nomi delle città dove le persone risiedono e non la provincia

    • Questo argomento è stato modificato 1 anno, 4 mesi fa da  mattia29.
    #6857
    Davide Massidda
    Davide Massidda
    Moderatore

    Se non hai una variabile che codifica per la provincia, te la devi creare. Hai quindi bisogno di un dataset esterno che indichi, per ogni comune, la corrispettiva provincia. A questo punto punto, incroci i due dataset e aggiungi a quello originario la provincia di riferimento, e su questa ti fai i tuoi calcoli.

    #6861

    mattia29
    Partecipante

    esatto, non ho una variabile che codifica la provincia. cosa intendi per dataset esterno?

    dovrei crearlo attraverso excel?..
    oppure se creassi nel file excel esportato in r, una variabile residenza e a quel punto utilizzare questo nuovo anche così sarebbe fattibile.
    però sono curiosa di sapere come posso creare dataset esterno e incrociare con l’originario

    #6862
    Francesco Cabiddu
    Francesco Cabiddu
    Amministratore del forum

    Ciao mattia29,
    Ci sono due articoli (uno di Davide e uno mio) su questo argomento (incrociare due tabelle) dentro al blog di insular: http://www.insular.it/2019/01/incrociare-due-tabelle-dplyrinner_join-vs-merge/

    Vedi se riesci a risolvere il problema leggendo questi. La strada da seguire come ha detto Davide dovrebbe essere creare a mano un dataset su Excel dove ad ogni città corrisponde una regione (un file con due colonne quindi). A quel punto potrai incrociare questa tabella con il tuo dataset originale, dove ad ogni città verrà automaticamente associata la sua regione. A quel punto avrai una variabile che ti indica se una persona è sarda.

    #6863
    Francesco Cabiddu
    Francesco Cabiddu
    Amministratore del forum

    Ciao mattia29,
    Ci sono due articoli (uno di Davide e uno mio) su questo argomento (incrociare due tabelle) dentro al blog di insular: http://www.insular.it/2019/01/incrociare-due-tabelle-dplyrinner_join-vs-merge/

    Vedi se riesci a risolvere il problema leggendo questi. La strada da seguire come ha detto Davide dovrebbe essere creare a mano un dataset su Excel dove ad ogni città corrisponde una regione (un file con due colonne quindi). A quel punto potrai incrociare questa tabella con il tuo dataset originale, dove ad ogni città verrà automaticamente associata la sua regione. A quel punto avrai una variabile che ti indica se una persona è sarda.

    #6865

    mattia29
    Partecipante

    GRazie mille Francesco,
    ho letto l’articolo dopo aver fatto a manina il filtraggio. Ovvero, ho una variabile nat, che identifica gli italiani con 1 e gli stranieri con 0, però voglio creare un ulteriore variabile nat1 dove vengano identificati anche i sardi, cioè 1 sardi, 2 italiani, 3 stranieri. Alla fine ho modificato il dataset di excel creando la colonna nat1 e inserito a manina i numeretti.
    Non so se con il tuo suggerimento sarebbe stato possibile’ applicarlo alla mia necessità. mi spiego. Si crea la variabile agente in servizi disattivi proveniente da clienti. però mi domando come fa r a riconoscere il valore esatto dell’osservazione corrispondente?. lo domando perchè, se io ho tre provenienze che identifico attraverso le modalità 1,2,3 come faccio a dire a r che 1 sono i sardi, 2 gli italiani e 3 gli stranieri?

    • Questa risposta è stata modificata 1 anno, 3 mesi fa da  mattia29.
    #6867

    mattia29
    Partecipante

    perdonami, credo di essere giunta a comprensione.
    Ho letto anche il posto precedente a questo che hai suggerito. grazie mille

    #6868
    Davide Massidda
    Davide Massidda
    Moderatore

    Prova a dare un’occhiata a questo codice.

    Prima di tutto mi costruisco due dataset, uno con i dati di interesse e un altro che associa a ogni città la corrispettiva regione:

    cittadini <- data.frame(
        nome = c("Paperino","Qua","Zio Paperone","Topolino","Pippo","Rockerduck"),
        nazione = c("Italia", "Italia", "Italia", "Italia", "Italia", "UK"),
        citta = c("Roma","Roma","Ancona","Cagliari","Cagliari","Londra"),
        variabile = c(24,32,11,76,44,27),
        stringsAsFactors = FALSE
    )
    georef <- data.frame(
        citta = c("Ancona","Roma","Cagliari","Siracusa"),
        regione = c("Marche","Lazio","Sardegna","Sicilia"),
        stringsAsFactors = FALSE
    )

    Eccoli qua:

    > cittadini
              nome nazione    citta variabile
    1     Paperino  Italia     Roma        24
    2          Qua  Italia     Roma        32
    3 Zio Paperone  Italia   Ancona        11
    4     Topolino  Italia Cagliari        76
    5        Pippo  Italia Cagliari        44
    6   Rockerduck      UK   Londra        27
    
    > georef
         citta  regione
    1   Ancona   Marche
    2     Roma    Lazio
    3 Cagliari Sardegna
    4 Siracusa  Sicilia

    Adesso osserva:

    
    > library(tidyverse)
    > left_join(cittadini, georef, by = "citta")
              nome nazione    citta variabile  regione
    1     Paperino  Italia     Roma        24    Lazio
    2          Qua  Italia     Roma        32    Lazio
    3 Zio Paperone  Italia   Ancona        11   Marche
    4     Topolino  Italia Cagliari        76 Sardegna
    5        Pippo  Italia Cagliari        44 Sardegna
    6   Rockerduck      UK   Londra        27     <NA>

    Ho unito i due dataset utilizzando come chiavee la citta: il comando left_join attacca al dataframe di sinistra il dataframe di destra ordinando le righe seguendo la corrispondenza per città.

    #6870
    Davide Massidda
    Davide Massidda
    Moderatore

    Dimenticavo. Per aggiungere una colonna che vada a specificare, per i sardi, una nazionalità “Sarda” e non Italiana (lo so, finirò in manette per questo :P), puoi fare così:

    cittadini <- cittadini %>%
        left_join(georef, by = "citta") %>%
        mutate(
            provenienza =
                ifelse(nazione == "Italia" & regione == "Sardegna", regione, nazione)
        )
    
    > cittadini
              nome nazione    citta variabile  regione provenienza
    1     Paperino  Italia     Roma        24    Lazio      Italia
    2          Qua  Italia     Roma        32    Lazio      Italia
    3 Zio Paperone  Italia   Ancona        11   Marche      Italia
    4     Topolino  Italia Cagliari        76 Sardegna    Sardegna
    5        Pippo  Italia Cagliari        44 Sardegna    Sardegna
    6   Rockerduck      UK   Londra        27     <NA>          UK
    #6871

    pdeninis
    Partecipante

    Dimenticavo. Per aggiungere una colonna che vada a specificare, per i sardi, una nazionalità “Sarda” e non Italiana (lo so, finirò in manette per questo :P), puoi fare così

    Ahahah! Grande Davide!!

    #6876
    Francesco Cabiddu
    Francesco Cabiddu
    Amministratore del forum

    Per aggiungere una colonna che vada a specificare, per i sardi, una nazionalità “Sarda” e non Italiana

    😂👍🏻

    #6877
    Davide Massidda
    Davide Massidda
    Moderatore

    Lo so, finirò in manette per queste dichiarazioni!

    #7530

    Antonio
    Partecipante

    BuonGiorno,
    Come posso raggruppare la variabile età o in generale una variabile continua (ho letto l’articolo La variabile età…ma portate pazienza!) in una variabile a intervalli “0-29” “30-64” “65+” nello stesso dataset?
    Grazie

    #7531

    Antonio
    Partecipante

    variabile continua in una a intervalli col mutate Grazie

    #7532

    Antonio
    Partecipante

    Ma Dov’è l’errore?
    library(dplyr)

    iris2=iris
    iris2 = iris2 %>% mutate (
    if (iris2$Petal.With<=0.29){Petal.Int=”0.00-0.29″}
    else if (0.30<=iris2$Petal.With<=1.29){Petal.Int=”0.30-1.29″}
    else if (1.30<=iris2$Petal.With<=1.79){Petal.Int=”1.30-1.79″}
    else {Petal.Int=”1.80-2.50″}
    )
    Grazie

Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)

Devi essere loggato per rispondere a questa discussione.