Προγραμματισμός

Κάντε περισσότερα με το R: Πίνακες γρήγορης αναζήτησης χρησιμοποιώντας ονόματα διανυσμάτων

Ποια είναι η κρατική συντομογραφία για το Αρκάνσας; Είναι AR; ΑΚ; ΟΠΩΣ ΚΑΙ?

Ίσως έχετε ένα πλαίσιο δεδομένων με τις πληροφορίες. Ή όποιος πληροφορίες όπου υπάρχει μία στήλη με κατηγορίες και μια άλλη στήλη με τιμές. Οι πιθανότητες είναι, σε κάποιο σημείο να θέλετε να αναζητήσετε αξία ανά κατηγορία, μερικές φορές γνωστή ως κλειδί. Πολλές γλώσσες προγραμματισμού έχουν τρόπους να δουλεύουν με ζεύγη τιμών-κλειδιών. Αυτό είναι εύκολο να γίνει και στο R, με ονόματα διανυσμάτων. Δείτε πώς.

Έχω δεδομένα με ονόματα κατάστασης και συντομογραφίες, τα οποία έχω αποθηκεύσει σε ένα πλαίσιο δεδομένων με το όνομα ταχυδρομικό_df. (Ο κωδικός για τη δημιουργία αυτού του πλαισίου δεδομένων βρίσκεται στο κάτω μέρος αυτής της ανάρτησης εάν θέλετε να ακολουθήσετε).

Θα τρέξω ουρά (postal_df) για να δούμε πώς μοιάζει.

 State PostalCode 45 Vermont VT 46 Virginia VA 47 Washington WA 48 West Virginia WV 49 Ουισκόνσιν WI 50 Ουαϊόμινγκ WY

Ένας πίνακας αναζήτησης / ονομαζόμενο διάνυσμα έχει τιμές ως διάνυσμα και κλειδιά ως ονόματα. Επιτρέψτε μου, λοιπόν, να δημιουργήσω πρώτα ένα διάνυσμα των τιμών, οι οποίες βρίσκονται στη στήλη PostalCode:

getpostalcode <- postal_df $ Ταχυδρομικός κώδικας

Και στη συνέχεια προσθέτω ονόματα από τη στήλη Πολιτεία.

ονόματα (getpostalcode) <- postal_df $ State

Προς την χρήση αυτό ονομάζεται διάνυσμα ως πίνακας αναζήτησης, η μορφή είναι mylookupvector ['κλειδί'].

Ορίστε λοιπόν πώς να λάβετε τον ταχυδρομικό κώδικα για το Αρκάνσας:

getpostalcode [«Αρκάνσας»]

Εάν θέλετε μόνο την τιμή, χωρίς το κλειδί, προσθέστε το ονομα συνάρτηση σε αυτήν την τιμή που επιστρέφετε:

unsame (getpostalcode [‘Αρκάνσας’])

Ενημέρωση: Μπορείτε επίσης να λάβετε μόνο μία τιμή χρησιμοποιώντας τη μορφή getpostalcode [[«Αρκάνσας»]] - δηλαδή, δύο αγκύλες αντί για προσθήκη μη όνομα (). Ευχαριστώ τον Peter Harrison για την συμβουλή μέσω Twitter. Ωστόσο, ο Hadley Wickham σημειώνει ότι η μορφή διπλού βραχίονα λειτουργεί μόνο για μία τιμή. Εάν κάνετε κάτι σαν να δημιουργήσετε μια νέα στήλη σε ένα πλαίσιο δεδομένων, παραμείνετε στο όνομα ().

Αυτό είναι το μόνο που υπάρχει. Ξέρω ότι αυτό είναι ένα κάπως ασήμαντο παράδειγμα, αλλά έχει κάποια πραγματική χρήση. Για παράδειγμα, έχω ένα όνομα φορέα κωδικών FIPS που χρειάζομαι όταν δουλεύω με δεδομένα απογραφής ΗΠΑ.

Ξεκίνησα με ένα πλαίσιο δεδομένων καταστάσεων και κωδικών FIPS fipsdf (ο κωδικός για αυτό είναι παρακάτω). Στη συνέχεια, δημιούργησα ένα διάνυσμα που ονομάζεται getfips από τη στήλη κώδικα fips του πλαισίου δεδομένων και πρόσθεσε τις καταστάσεις ως ονόματα.

fipsdf <- rio :: εισαγωγή ("data / FIPS.csv")

getfips <- fipsdf $ FIPS

ονόματα (getfips) <- fipsdf $ Κατάσταση

Τώρα αν θέλω τον κωδικό FIPS για τη Μασαχουσέτη, μπορώ να χρησιμοποιήσω getfips [«Μασαχουσέτη»] . Θα προσθέσω το όνομα () για να λάβω μόνο την τιμή χωρίς το όνομα: Ονόματα (getfips ['Massachusetts']) .

Εάν πρέπει να συνεχίσετε να χρησιμοποιείτε μη όνομα () γίνεται πολύ ενοχλητικό, μπορείτε ακόμη και να κάνετε μια μικρή λειτουργία από τον πίνακα αναζήτησης:

get_state_fips <- function (κατάσταση, lookupvector = getfips) {

fipscode <- unname (lookupvector [κατάσταση])

επιστροφή (fipscode)

}

Εδώ, έχω δύο επιχειρήματα για τη λειτουργία μου. Το ένα είναι το «κλειδί» μου, σε αυτήν την περίπτωση το όνομα της πολιτείας. το άλλο είναι lookupvector, η οποία είναι προεπιλογή στο my getfips διάνυσμα.

Και μπορείτε να δείτε πώς χρησιμοποιώ τη λειτουργία. Είναι απλώς το όνομα της συνάρτησης με ένα όρισμα, το όνομα της κατάστασης: get_state_fips ("Νέα Υόρκη") .

Μπορώ να κάνω μια λειτουργία που μοιάζει λίγο πιο γενική, όπως

get_value <- λειτουργία (mykey, mylookupvector) {

myvalue <- mylookupvector [mykey]

myvalue <- μη όνομα (myvalue)

επιστροφή (myvalue)

}

Έχει ένα πιο γενικό όνομα για τη συνάρτηση, get_value (); ένα πιο γενικό όνομα πρώτου ορίσματος, το κλειδί μου, και ένα δεύτερο επιχείρημα του mylookupvector που δεν είναι προεπιλογή σε τίποτα.

Είναι το ίδιο πράγμα που έκανα όλα: παίρνοντας την τιμή από το διάνυσμα αναζήτησης lookupvector ['κλειδί'] και στη συνέχεια εκτελέστε το μη όνομα () λειτουργία. Όμως όλα είναι μέσα σε μια λειτουργία. Έτσι, το αποκαλώντας είναι λίγο πιο κομψό.

Μπορώ να χρησιμοποιήσω αυτήν τη λειτουργία με οποιοδήποτε όνομα φορέα που έχω δημιουργήσει. Εδώ, το χρησιμοποιώ με το Arkansas και το δικό μου getpostalcode διάνυσμα:get_value ("Αρκάνσας", getpostalcode) .

Εύκολη αναζήτηση στο R! Απλώς θυμηθείτε ότι τα ονόματα πρέπει να είναι μοναδικά. Μπορείτε να επαναλάβετε αξίες, αλλά όχι κλειδιά.

Για πρώτη φορά είδα αυτήν την ιδέα χρόνια πριν στο Hadley Wickham's Προηγμένο R Βιβλίο. Το χρησιμοποιώ ακόμα και ελπίζω να το βρείτε επίσης χρήσιμο.

Κωδικός για τη δημιουργία πλαισίου δεδομένων με ταχυδρομικές συντομογραφίες

postal_df <- data.frame (stringsAsFactors = FALSE,

Πολιτεία = c ("Αλαμπάμα", "Αλάσκα", "Αριζόνα", "Αρκάνσας", "Καλιφόρνια",

"Κολοράντο", "Κονέκτικατ", "Ντέλαγουερ", "Φλόριντα", "Γεωργία",

"Χαβάη", "Αϊντάχο", "Ιλινόις", "Ιντιάνα", "Αϊόβα", "Κάνσας",

"Κεντάκι", "Λουιζιάνα", "Μέιν", "Μέριλαντ", "Μασαχουσέτη",

"Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",

"Νεμπράσκα", "Νεβάδα", "Νιού Χάμσαϊρ", "Νιου Τζέρσεϊ", "Νέο Μεξικό",

"Νέα Υόρκη", "Βόρεια Καρολίνα", "Βόρεια Ντακότα", "Οχάιο",

"Οκλαχόμα", "Όρεγκον", "Πενσυλβάνια", "Ρόουντ Άιλαντ", "Νότια Καρολίνα",

"Νότια Ντακότα", "Τενεσί", "Τέξας", "Γιούτα", "Βερμόντ",

"Βιρτζίνια", "Ουάσιγκτον", "Δυτική Βιρτζίνια", "Ουισκόνσιν", "Ουαϊόμινγκ"),

PostalCode = c ("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA",

"HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",

"MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",

"NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD",

"TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY")

)

Κωδικός για τη δημιουργία πλαισίου δεδομένων με κωδικούς FIPS

fipsdf <- data.frame (State = c ("Αλαμπάμα", "Αλάσκα", "Αριζόνα", "Αρκάνσας",

"Καλιφόρνια", "Κολοράντο", "Κονέκτικατ", "Ντέλαγουερ", "Φλόριντα",

"Γεωργία", "Χαβάη", "Αϊντάχο", "Ιλινόις", "Ιντιάνα", "Αϊόβα",

"Κάνσας", "Κεντάκι", "Λουιζιάνα", "Μέιν", "Μέριλαντ", "Μασαχουσέτη",

"Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",

"Νεμπράσκα", "Νεβάδα", "Νιού Χάμσαϊρ", "Νιου Τζέρσεϊ", "Νέο Μεξικό",

"Νέα Υόρκη", "Βόρεια Καρολίνα", "Βόρεια Ντακότα", "Οχάιο", "Οκλαχόμα",

"Όρεγκον", "Πενσυλβάνια", "Ρόουντ Άιλαντ", "Νότια Καρολίνα", "Νότια Ντακότα",

"Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington",

"Δυτική Βιρτζίνια", "Ουισκόνσιν", "Ουαϊόμινγκ"), FIPS = c ("01", "02",

"04", "05", "06", "08", "09", "10", "12", "13", "15", "16", "17",

"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28",

"29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",

"40", "41", "42", "44", "45", "46", "47", "48", "49", "50", "51",

"53", "54", "55", "56"), χορδέςAsFactors = FALSE)

$config[zx-auto] not found$config[zx-overlay] not found