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

R tutorial: Πώς να εισαγάγετε δεδομένα στο R

Αποκτήστε το πλήρες βιβλίο
Πρακτικό R για μαζική επικοινωνία και δημοσιογραφία MSRP 59,95 $ Δείτε το

Αυτό το άρθρο αποσπάστηκε από το "Practical R for Mass Communication and Journalism" με άδεια του εκδότη. © 2019 από την Taylor & Francis Group, LLC.

Προτού μπορέσετε να αναλύσετε και να οπτικοποιήσετε δεδομένα, πρέπει να τα εισάγετε στο R. Υπάρχουν διάφοροι τρόποι για να το κάνετε αυτό, ανάλογα με τον τρόπο μορφοποίησης των δεδομένων σας και πού βρίσκονται.

Συνήθως, η λειτουργία που χρησιμοποιείτε για την εισαγωγή δεδομένων εξαρτάται από τη μορφή αρχείου των δεδομένων. Στη βάση R, για παράδειγμα, μπορείτε να εισαγάγετε ένα αρχείο CSV με read.csv (). Ο Hadley Wickham δημιούργησε ένα πακέτο που ονομάζεται readxl το οποίο, όπως θα περίμενε κανείς, έχει μια λειτουργία για ανάγνωση σε αρχεία Excel. Υπάρχει ένα άλλο πακέτο, googlesheets, για τη λήψη δεδομένων από υπολογιστικά φύλλα Google.

Αλλά αν δεν θέλετε να τα θυμάστε όλα αυτά, υπάρχει rio.

Η μαγεία του Ρίο

«Ο στόχος του rio είναι να κάνει το αρχείο δεδομένων I / O [εισαγωγή / έξοδος] σε R όσο το δυνατόν πιο εύκολο εφαρμόζοντας τρεις απλές λειτουργίες σε στυλ μαχαιριού Ελβετίας-στρατού», σύμφωνα με τη σελίδα του έργου GitHub. Αυτές οι λειτουργίες είναι εισαγωγή(), εξαγωγή(), και μετατρέπω().

Έτσι, το πακέτο rio έχει μόνο μία λειτουργία για ανάγνωση σε πολλούς διαφορετικούς τύπους αρχείων: εισαγωγή(). Αν εσύ εισαγωγή ("myfile.csv"), ξέρει να χρησιμοποιεί μια συνάρτηση για να διαβάσει ένα αρχείο CSV. εισαγωγή ("myspreadsheet.xlsx") λειτουργεί με τον ίδιο τρόπο. Στην πραγματικότητα, το rio χειρίζεται περισσότερες από δύο δωδεκάδες μορφές, συμπεριλαμβανομένων δεδομένων διαχωρισμένων με καρτέλες (με την επέκταση .tsv), JSON, Stata και δεδομένων μορφής σταθερού πλάτους (.fwf).

Πακέτα που απαιτούνται για αυτό το σεμινάριο

  • Ρίο
  • htmltab
  • readxl
  • googlesheets
  • ειρηνιστής
  • επιστάτης
  • rmiscutils (pm GitHub) ή readr
  • καμπαναριό

Μόλις αναλύσετε τα δεδομένα σας, εάν θέλετε να αποθηκεύσετε τα αποτελέσματα ως CSV, υπολογιστικό φύλλο Excel ή άλλες μορφές, rio's εξαγωγή() λειτουργία μπορεί να το χειριστεί αυτό.

Εάν δεν έχετε ήδη το πακέτο rio στο σύστημά σας, εγκαταστήστε το τώρα με install.packages ("rio").

Έχω ρυθμίσει ορισμένα δείγματα δεδομένων με δεδομένα χειμερινής χιονόπτωσης στη Βοστώνη. Θα μπορούσατε να μεταβείτε στο //bit.ly/BostonSnowfallCSV και να κάνετε δεξί κλικ για να αποθηκεύσετε το αρχείο ως BostonWinterSnowfalls.csv στον τρέχοντα κατάλογο εργασίας του έργου R. Αλλά ένα από τα σημεία της δέσμης ενεργειών είναι η αντικατάσταση της χειροκίνητης εργασίας - κουραστική ή με άλλο τρόπο - με αυτοματισμό που είναι εύκολο να αναπαραχθεί. Αντί να κάνετε κλικ για λήψη, μπορείτε να χρησιμοποιήσετε το R's λήψη. αρχείο Λειτουργεί με τη σύνταξη download.file ("url", "destinationFileName.csv"):

download.file ("// bit.ly/BostonSnowfallCSV", "BostonWinterSnowfalls.csv")

Αυτό προϋποθέτει ότι το σύστημά σας θα ανακατευθύνει από αυτήν τη συντόμευση URL Bit.ly και θα βρει με επιτυχία το πραγματικό URL αρχείου, //raw.githubusercontent.com/smach/NICAR15data/master/BostonWinterSnowfalls.csv. Κατά καιρούς είχα προβλήματα με την πρόσβαση σε περιεχόμενο ιστού σε παλιούς υπολογιστές με Windows. Εάν έχετε ένα από αυτά και αυτός ο σύνδεσμος Bit.ly δεν λειτουργεί, μπορείτε να αλλάξετε την πραγματική διεύθυνση URL για τον σύνδεσμο Bit.ly. Μια άλλη επιλογή είναι η αναβάθμιση του υπολογιστή σας Windows σε Windows 10, εάν είναι δυνατόν, για να δείτε αν αυτό κάνει το κόλπο.

Αν θέλετε αυτό το rio να μπορεί να εισάγει δεδομένα απευθείας από μια διεύθυνση URL, στην πραγματικότητα μπορεί και θα το φτάσω στην επόμενη ενότητα. Το σημείο του Αυτό ενότητα είναι να ασκήσετε πρακτική εργασία με ένα τοπικό αρχείο.

Μόλις έχετε το δοκιμαστικό αρχείο στο τοπικό σας σύστημα, μπορείτε να φορτώσετε αυτά τα δεδομένα σε ένα αντικείμενο R που ονομάζεται snowdata με τον κωδικό:

snowdata <- rio :: εισαγωγή ("BostonWinterSnowfalls.csv")

Λάβετε υπόψη ότι είναι πιθανό το rio να σας ζητήσει να κατεβάσετε ξανά το αρχείο σε δυαδική μορφή, οπότε θα πρέπει να εκτελέσετε

download.file ("// bit.ly/BostonSnowfallCSV", "BostonWinterSnowfalls.csv", mode = "wb")

Βεβαιωθείτε ότι χρησιμοποιείτε τις επιλογές ολοκλήρωσης καρτελών του RStudio. Εάν πληκτρολογείτε Ρίο :: και περιμένετε, θα λάβετε μια λίστα με όλες τις διαθέσιμες λειτουργίες. Τύπος χιόνι και περιμένετε, και θα πρέπει να δείτε το πλήρες όνομα του αντικειμένου σας ως επιλογή. Χρησιμοποιήστε τα πλήκτρα πάνω και κάτω βέλους για εναλλαγή μεταξύ των προτάσεων αυτόματης συμπλήρωσης. Μόλις επισημανθεί η επιλογή που θέλετε, πατήστε το πλήκτρο Tab (ή Enter) για να προστεθεί το πλήρες όνομα ή το όνομα της συνάρτησης στο σενάριό σας.

Θα πρέπει να δείτε το αντικείμενο snowdata εμφανίζονται στην καρτέλα περιβάλλοντος στο επάνω δεξιό τμήμα του παραθύρου RStudio. (Εάν στο επάνω δεξιό τμήμα του παραθύρου εμφανίζεται το Ιστορικό εντολών σας αντί του Περιβάλλοντός σας, επιλέξτε την καρτέλα Περιβάλλον.)

Όμιλος Taylor & Francis

snowdata θα πρέπει να δείξει ότι έχει 76 "παρατηρήσεις" - παρατηρήσεις ή σειρές - και δύο μεταβλητές ή στήλες. Εάν κάνετε κλικ στο βέλος στα αριστερά του snowdata για να επεκτείνετε την καταχώριση, θα δείτε τα δύο ονόματα στηλών και τον τύπο δεδομένων που διατηρεί κάθε στήλη. ο Χειμώνας είναι συμβολοσειρές χαρακτήρων και το Σύνολο η στήλη είναι αριθμητική. Θα πρέπει επίσης να μπορείτε να δείτε τις πρώτες λίγες τιμές κάθε στήλης στο παράθυρο Περιβάλλον.

Όμιλος Taylor & Francis

Κάντε κλικ στη λέξη snowdata στην καρτέλα Περιβάλλον για μια πιο ομοιόμορφη προβολή των δεδομένων σας. Μπορείτε να λάβετε την ίδια προβολή από την κονσόλα R με την εντολή Προβολή (snowdata) (αυτό πρέπει να είναι ένα κεφάλαιο V στο View—θέα δεν θα λειτουργήσει). Σημείωση: snowdata δεν βρίσκεται σε εισαγωγικά επειδή αναφέρεστε στο όνομα ενός Αντικείμενο R στο περιβάλλον σας. Στο rio :: εισαγωγή εντολή πριν, BostonWinterSnowfalls.csv είναι σε εισαγωγικά επειδή δεν είναι αντικείμενο R. είναι ένα όνομα συμβολοσειράς χαρακτήρων ενός αρχείου εκτός του R.

Όμιλος Taylor & Francis

Αυτή η προβολή έχει μερικές συμπεριφορές που μοιάζουν με υπολογιστικό φύλλο. Κάντε κλικ σε μια κεφαλίδα στήλης για να την ταξινομήσετε με βάση τις τιμές αυτής της στήλης σε αύξουσα σειρά. κάντε κλικ στην ίδια κεφαλίδα στήλης για δεύτερη φορά για ταξινόμηση με φθίνουσα σειρά. Υπάρχει ένα πλαίσιο αναζήτησης για να βρείτε σειρές που αντιστοιχούν σε ορισμένους χαρακτήρες.

Εάν κάνετε κλικ στο εικονίδιο φίλτρου, λαμβάνετε ένα φίλτρο για κάθε στήλη. ο Χειμώνας Η στήλη χαρακτήρων λειτουργεί όπως θα περίμενε κανείς, φιλτράροντας για τυχόν σειρές που περιέχουν τους χαρακτήρες που πληκτρολογείτε. Εάν κάνετε κλικ στο Σύνολο Ωστόσο, το φίλτρο της αριθμητικής στήλης, οι παλαιότερες εκδόσεις του RStudio δείχνουν ένα ρυθμιστικό ενώ οι νεότερες εμφανίζουν ένα ιστόγραμμα και ένα πλαίσιο για φιλτράρισμα.

Εισαγάγετε ένα αρχείο από τον Ιστό

Εάν θέλετε να κάνετε λήψη και εισαγωγή ενός αρχείου από τον Ιστό, μπορείτε να το κάνετε αν είναι διαθέσιμο στο κοινό και σε μορφή όπως το Excel ή το CSV. Δοκιμάστε

snowdata <- rio :: εισαγωγή ("// bit.ly/BostonSnowfallCSV", μορφή)

Πολλά συστήματα μπορούν να ακολουθήσουν τη διεύθυνση URL ανακατεύθυνσης στο αρχείο ακόμα και αφού πρώτα σας δώσουν ένα μήνυμα σφάλματος, αρκεί να καθορίσετε τη μορφή ως "csv" επειδή το όνομα αρχείου εδώ δεν περιλαμβάνει .csv. Αν η δική σας δεν λειτουργεί, χρησιμοποιήστε τη διεύθυνση URL //raw.githubusercontent.com/smach/R4JournalismBook/master/data/BostonSnowfall.csv.

Το rio μπορεί επίσης να εισαγάγει καλά μορφοποιημένους πίνακες HTML από ιστοσελίδες, αλλά οι πίνακες πρέπει να είναι επακρώς καλά μορφοποιημένο. Ας υποθέσουμε ότι θέλετε να κατεβάσετε τον πίνακα που περιγράφει τις αξιολογήσεις σοβαρότητας της Εθνικής Υπηρεσίας Καιρού για χιονοθύελλες. Η σελίδα των Εθνικών Κέντρων Περιβαλλοντικής Πληροφόρησης Περιφερειακή Χιονόπτωση έχει μόνο έναν πίνακα, πολύ καλά σχεδιασμένο, οπότε ο κώδικας όπως αυτός πρέπει να λειτουργεί

rsi_description <- rio :: import ("//www.ncdc.noaa.gov/snow-and-ice/rsi/", format = "html")

Σημειώστε και πάλι ότι πρέπει να συμπεριλάβετε τη μορφή, σε αυτήν την περίπτωση μορφή = "html" . επειδή η ίδια η διεύθυνση URL δεν δίνει καμία ένδειξη για το είδος του αρχείου. Εάν η διεύθυνση URL περιείχε ένα όνομα αρχείου με ένα .html επέκταση, ο Ρίο θα ήξερε.

Στην πραγματική ζωή, ωστόσο, τα δεδομένα του Διαδικτύου σπάνια εμφανίζονται σε τόσο καθαρή, απομονωμένη μορφή. Μια καλή επιλογή για περιπτώσεις που δεν είναι τόσο καλά κατασκευασμένες είναι συχνά το πακέτο htmltab. Εγκαταστήστε το με install.packages ("htmltab"). Η λειτουργία του πακέτου για την ανάγνωση ενός πίνακα HTML ονομάζεται επίσης htmltab. Αλλά αν το εκτελέσετε:

βιβλιοθήκη (htmltab) citytable <- htmltab ("// en.wikipedia.org/wiki/List_of_United_States_cities_by_population") str (citytable)

βλέπετε ότι δεν έχετε τον σωστό πίνακα, επειδή το πλαίσιο δεδομένων περιέχει ένα αντικείμενο. Επειδή δεν έχω προσδιορίσει οι οποίες πίνακα, τράβηξε τον πρώτο πίνακα HTML στη σελίδα. Αυτό δεν έπρεπε να είναι αυτό που θέλω. Δεν αισθάνομαι σαν να εισάγω κάθε πίνακα στη σελίδα μέχρι να βρω το σωστό, αλλά ευτυχώς έχω μια επέκταση Chrome που ονομάζεται Table Capture που μου επιτρέπει να βλέπω μια λίστα με τους πίνακες σε μια σελίδα.

Την τελευταία φορά που έλεγξα, ο πίνακας 5 με περισσότερες από 300 σειρές ήταν αυτός που ήθελα. Εάν αυτό δεν λειτουργεί για εσάς τώρα, δοκιμάστε να εγκαταστήσετε το Table Capture σε πρόγραμμα περιήγησης Chrome για να ελέγξετε ποιος πίνακας θέλετε να κατεβάσετε.

Θα προσπαθήσω ξανά, καθορίζοντας τον πίνακα 5 και έπειτα θα δω ποια ονόματα στηλών βρίσκονται στο νέο citytable. Σημειώστε ότι στον ακόλουθο κώδικα, έβαλα το αστικό τραπέζι <- htmltab () εντολή σε πολλές γραμμές. Έτσι, δεν ξεπέρασε τα περιθώρια - μπορείτε να διατηρήσετε τα πάντα σε μία γραμμή. Εάν ο αριθμός του πίνακα έχει αλλάξει από τη δημοσίευση αυτού του άρθρου, αντικαταστήστε το που = 5 με τον σωστό αριθμό.

Αντί να χρησιμοποιήσετε τη σελίδα στη Wikipedia, μπορείτε να αντικαταστήσετε τη διεύθυνση URL της Wikipedia με τη διεύθυνση URL ενός αντιγράφου του αρχείου που δημιούργησα. Αυτό το αρχείο βρίσκεται στη διεύθυνση //bit.ly/WikiCityList. Για να χρησιμοποιήσετε αυτήν την έκδοση, πληκτρολογήστε bit.ly/WikiCityList σε ένα πρόγραμμα περιήγησης και, στη συνέχεια, αντιγράψτε τη μεγάλη διεύθυνση URL που ανακατευθύνει και χρησιμοποιεί ότι αντί για τη διεύθυνση URL της Wikipedia στον παρακάτω κώδικα:

βιβλιοθήκη πόλης (htmltab)

Πώς το ήξερα οι οποίες ήταν το επιχείρημα που έπρεπε να καθορίσω τον αριθμό του πίνακα; Διάβασα το htmltab αρχείο βοήθειας χρησιμοποιώντας την εντολή ; htmltab. Αυτό περιελάμβανε όλα τα διαθέσιμα επιχειρήματα. Σάρωσα τις δυνατότητες και «οι οποίες ένα διάνυσμα μήκους ένα για την αναγνώριση του πίνακα στο έγγραφο "φαινόταν δεξιά.

Σημειώστε επίσης ότι χρησιμοποίησα colnames (αστικό τραπέζι) αντί ονόματα (citytable) για να δείτε τα ονόματα των στηλών. Και τα δύο θα λειτουργήσουν. Η βάση R έχει επίσης τοονομασίες () λειτουργία.

Τέλος πάντων, αυτά τα αποτελέσματα του πίνακα είναι πολύ καλύτερα, αν και μπορείτε να δείτε από την εκτέλεση str (αστικό τραπέζι) ότι μερικές στήλες που πρέπει να είναι αριθμοί ήρθαν ως συμβολοσειρές χαρακτήρων. Μπορείτε να το δείτε και τα δύο από το Χρ δίπλα στο όνομα της στήλης και τα εισαγωγικά γύρω από τιμές όπως 8,550,405.

Αυτή είναι μια από τις μικρές ενοχλήσεις του R: Ο R γενικά δεν το καταλαβαίνει 8,550 είναι ένας αριθμός. Αντιμετώπισα αυτό το πρόβλημα μόνος μου γράφοντας τη δική μου λειτουργία στο δικό μου πακέτο rmiscutils για να μετατρέψω όλες αυτές τις "συμβολοσειρές χαρακτήρων" που είναι πραγματικά αριθμοί με κόμματα πίσω σε αριθμούς. Όλοι μπορούν να κατεβάσουν το πακέτο από το GitHub και να το χρησιμοποιήσουν.

Ο πιο δημοφιλής τρόπος για την εγκατάσταση πακέτων από το GitHub είναι να χρησιμοποιήσετε ένα πακέτο που ονομάζεται devtools. Το devtools είναι ένα εξαιρετικά ισχυρό πακέτο σχεδιασμένο κυρίως για άτομα που θέλουν να γράψουν το δικό τους τα δικά πακέτα και περιλαμβάνει μερικούς τρόπους για την εγκατάσταση πακέτων από άλλα μέρη εκτός από το CRAN. Ωστόσο, τα devtools συνήθως απαιτούν μερικά επιπλέον βήματα για εγκατάσταση σε σύγκριση με ένα τυπικό πακέτο και θέλω να αφήσω ενοχλητικές εργασίες διαχειριστή συστήματος έως ότου είναι απολύτως απαραίτητο.

Ωστόσο, το πακέτο pacman εγκαθιστά επίσης πακέτα από πηγές εκτός CRAN όπως το GitHub. Εάν δεν το έχετε κάνει ακόμα, εγκαταστήστε το pacman με install.packages ("pacman").

pacman's p_install_gh ("όνομα χρήστη / packagerepo") η συνάρτηση εγκαθίσταται από ένα repo GitHub.

p_load_gh ("όνομα χρήστη / packagerepo")φορτία ένα πακέτο στη μνήμη εάν υπάρχει ήδη στο σύστημά σας και εγκαθιστά πρώτα και στη συνέχεια φορτώνει ένα πακέτο από το GitHub εάν το πακέτο δεν υπάρχει τοπικά.

Το πακέτο rmisc Utilities μπορεί να βρεθεί στη διεύθυνση smach / rmiscutils. Τρέξιμο pacman :: p_load_gh ("smach / rmiscutils") για να εγκαταστήσω το πακέτο rmiscutils μου.

Σημείωση: Ένα εναλλακτικό πακέτο για την εγκατάσταση πακέτων από το GitHub ονομάζεται τηλεχειριστήρια, από τα οποία μπορείτε να εγκαταστήσετε μέσωinstall.packages ("τηλεχειριστήρια"). Ο κύριος σκοπός του είναι η εγκατάσταση πακέτων από απομακρυσμένα αποθετήρια όπως το GitHub. Μπορείτε να δείτε το αρχείο βοήθειας με βοήθεια (πακέτο = "τηλεχειριστήρια").

Και, πιθανότατα το πιο λεπτό από όλα είναι ένα πακέτο που ονομάζεται githubinstall. Στόχος του είναι να μαντέψει το ρεπό όπου βρίσκεται ένα πακέτο. Εγκαταστήστε το μέσωinstall.packages ("githubinstall"); τότε μπορείτε να εγκαταστήσετε το πακέτο rmiscutils μου χρησιμοποιώνταςgithubinstall :: gh_install_packages ("rmiscutils"). Θα ερωτηθείτε εάν θέλετε να εγκαταστήσετε το πακέτο στο smach / rmisutils (κάνεις).

Τώρα που έχετε εγκαταστήσει τη συλλογή λειτουργιών μου, μπορείτε να χρησιμοποιήσετε το my number_with_commas () λειτουργία για να αλλάξετε αυτές τις συμβολοσειρές χαρακτήρων που πρέπει να είναι αριθμοί πίσω σε αριθμούς. Προτείνω να προσθέσετε μια νέα στήλη στο πλαίσιο δεδομένων αντί να τροποποιήσετε μια υπάρχουσα στήλη - αυτή είναι καλή πρακτική ανάλυσης δεδομένων ανεξάρτητα από την πλατφόρμα που χρησιμοποιείτε.

Σε αυτό το παράδειγμα, θα ονομάσω τη νέα στήλη PopEst2017. (Εάν ο πίνακας έχει ενημερωθεί από τότε, χρησιμοποιήστε τα κατάλληλα ονόματα στηλών.)

βιβλιοθήκη (rmiscutils) citytable $ PopEst2017 <- number_with_commas (citytable $ 2017 εκτίμηση)

Παρεμπιπτόντως, το πακέτο rmiscutils δεν είναι ο μόνος τρόπος αντιμετώπισης των εισαγόμενων αριθμών που έχουν κόμματα. Αφού δημιούργησα το πακέτο rmiscutils και το number_with_commas () λειτουργία, το πακέτο tidyverse readr γεννήθηκε. Το readr περιλαμβάνει επίσης μια συνάρτηση που μετατρέπει τις συμβολοσειρές χαρακτήρων σε αριθμούς, parse_number ().

Μετά την εγκατάσταση του readr, θα μπορούσατε να δημιουργήσετε αριθμούς από τη στήλη εκτίμησης του 2017 με το readr:

citytable $ PopEst2017 <- readr :: parse_number (citytable $ "εκτίμηση 2017")

Ένα πλεονέκτημα του readr :: parse_number () είναι ότι μπορείτε να ορίσετε τη δική σας μικρός λοβός() να ελέγχετε πράγματα όπως κωδικοποίηση και δεκαδικά ψηφία, τα οποία μπορεί να ενδιαφέρουν τους αναγνώστες που δεν βασίζονται στις ΗΠΑ. Τρέξιμο ; parse_number για περισσότερες πληροφορίες.

Σημείωση: Εάν δεν χρησιμοποιήσατε την ολοκλήρωση καρτέλας για τη στήλη εκτίμησης 2017, ενδέχεται να είχατε πρόβλημα με το όνομα της στήλης, εάν είχε κενό χώρο τη στιγμή που εκτελείτε αυτόν τον κωδικό. Στον κωδικό μου παραπάνω, παρατηρήστε ότι υπάρχουν πίσω μεμονωμένα εισαγωγικά (`) γύρω από το όνομα της στήλης. Αυτό συμβαίνει επειδή το υπάρχον όνομα είχε ένα κενό σε αυτό, το οποίο δεν θα έπρεπε να έχει στο R. Αυτό το όνομα στήλης έχει ένα άλλο πρόβλημα: Ξεκινά με έναν αριθμό, επίσης γενικά ένα R no-no. Το RStudio το γνωρίζει αυτό και προσθέτει αυτόματα τα απαραίτητα εισαγωγικά πίσω από το όνομα με αυτόματη συμπλήρωση καρτέλας.

Συμβουλή μπόνους: Υπάρχει ένα πακέτο R (φυσικά υπάρχει!) Που ονομάζεται επιστάτης που μπορεί να διορθώσει αυτόματα ενοχλητικά ονόματα στηλών που εισάγονται από μια πηγή δεδομένων που δεν είναι φιλική προς το R. Εγκαταστήστε το με install.packages ("θυρωρός"). Στη συνέχεια, μπορείτε να δημιουργήσετε νέα καθαρά ονόματα στηλών χρησιμοποιώντας τον επιστάτη clean_names () λειτουργία.

Τώρα, θα δημιουργήσω ένα εντελώς νέο πλαίσιο δεδομένων αντί να αλλάξω ονόματα στηλών στο αρχικό μου πλαίσιο δεδομένων και θα τρέξω τα clean_names () των επιστάτη στα αρχικά δεδομένα. Στη συνέχεια, ελέγξτε τα ονόματα στηλών πλαισίου δεδομένων με ονόματα ():

citytable_cleaned <- janitor :: clean_names (citytable)

ονόματα (citytable_cleaned)

Βλέπετε ότι τα κενά έχουν αλλάξει σε υπογράμμιση, τα οποία είναι νόμιμα σε ονόματα μεταβλητών R (όπως και οι τελείες). Και, όλα τα ονόματα στηλών που κάποτε ξεκινούσαν με έναν αριθμό έχουν ένα Χ στην αρχή.

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

Εισαγωγή δεδομένων από πακέτα

Υπάρχουν πολλά πακέτα που σας επιτρέπουν να αποκτήσετε πρόσβαση σε δεδομένα απευθείας από το R. Ένα είναι το quantmod, το οποίο σας επιτρέπει να τραβήξετε ορισμένα κυβερνητικά και οικονομικά δεδομένα των ΗΠΑ απευθείας στο R.

Ένα άλλο είναι το κατάλληλο πακέτο Weatherdata στο CRAN. Μπορεί να αντλήσει δεδομένα από το Weather Underground API, το οποίο διαθέτει πληροφορίες για πολλές χώρες σε όλο τον κόσμο.

Το πακέτο rnoaa, ένα έργο από την ομάδα rOpenSci, μπαίνει σε διάφορα διαφορετικά σύνολα δεδομένων Εθνικής Ωκεανικής και Ατμοσφαιρικής Διοίκησης των ΗΠΑ, συμπεριλαμβανομένων των πληροφοριών σχετικά με το κλίμα, τον σημαντήρα και τις καταιγίδες.

Εάν ενδιαφέρεστε για δεδομένα πολιτείας ή τοπικής αυτοδιοίκησης στις Η.Π.Α. ή τον Καναδά, ίσως θελήσετε να επισκεφτείτε το RSocrata για να δείτε αν μια εταιρεία που σας ενδιαφέρει δημοσιεύει δεδομένα εκεί. Δεν έχω ακόμη βρει μια πλήρη λίστα με όλα τα διαθέσιμα σύνολα δεδομένων Socrata, αλλά υπάρχει μια σελίδα αναζήτησης στη διεύθυνση //www.opendatanetwork.com. Προσοχή, ωστόσο: Υπάρχουν σύνολα που έχουν μεταφορτωθεί από την κοινότητα μαζί με επίσημα κυβερνητικά δεδομένα, επομένως ελέγξτε τον κάτοχο ενός συνόλου δεδομένων και μεταφορτώστε μια πηγή προτού βασιστείτε σε αυτό για περισσότερο από την πρακτική R Το "σύνολο δεδομένων ODN" σε ένα αποτέλεσμα σημαίνει ότι είναι ένα αρχείο που ανέβηκε από κάποιον στο ευρύ κοινό. Τα επίσημα σύνολα δεδομένων της κυβέρνησης τείνουν να εμφανίζονται σε διευθύνσεις URL όπως //data.CityOrStateName.gov και//data.CityOrStateName.us.

Για περισσότερα πακέτα εισαγωγής δεδομένων, ανατρέξτε στο γράφημα με δυνατότητα αναζήτησης στο //bit.ly/RDataPkgs. Εάν εργάζεστε με δεδομένα της κυβέρνησης των ΗΠΑ, ίσως να ενδιαφέρεστε ιδιαίτερα για την απογραφή και την τζιτσίκα, τα οποία και τα δύο αξιοποιούν τα δεδομένα του Γραφείου Απογραφής των ΗΠΑ. Άλλα χρήσιμα πακέτα κυβερνητικών δεδομένων περιλαμβάνουν το eu.us.opendata από τις κυβερνήσεις των ΗΠΑ και της Ευρωπαϊκής Ένωσης για να διευκολύνεται η σύγκριση δεδομένων και στις δύο περιοχές και η ακύρωση για τα δεδομένα απογραφής του Καναδά.

Όταν τα δεδομένα δεν είναι ιδανικά μορφοποιημένα

Σε όλες αυτές τις περιπτώσεις δειγμάτων δεδομένων, τα δεδομένα δεν ήταν μόνο καλά μορφοποιημένα, αλλά και ιδανικά: Μόλις το βρήκα, ήταν τέλεια δομημένο για τον R. Τι εννοώ με αυτό; Ήταν ορθογώνιο, με κάθε κελί να έχει μία τιμή αντί για συγχωνευμένα κελιά. Και η πρώτη σειρά είχε κεφαλίδες στήλης, σε αντίθεση με, για παράδειγμα, μια γραμμή τίτλου με μεγάλη γραμματοσειρά σε πολλά κελιά για να φαίνεται όμορφη - ή καθόλου κεφαλίδες στήλης.

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

Αρχικές σειρές που δεν αποτελούν μέρος των δεδομένων. Εάν γνωρίζετε ότι οι πρώτες σειρές ενός υπολογιστικού φύλλου Excel δεν διαθέτουν δεδομένα που θέλετε, μπορείτε να πείτε στο rio να παραλείψει μία ή περισσότερες γραμμές. Η σύνταξη είναι rio :: εισαγωγή ("mySpreadsheet.xlsx", παράλειψη = 3) για να αποκλείσετε τις τρεις πρώτες σειρές. παραλείπω παίρνει ακέραιο.

Δεν υπάρχουν ονόματα στηλών στο υπολογιστικό φύλλο. Η προεπιλεγμένη εισαγωγή προϋποθέτει ότι η πρώτη σειρά του φύλλου σας είναι τα ονόματα των στηλών. Εάν τα δεδομένα σας όχι έχετε κεφαλίδες, η πρώτη σειρά των δεδομένων σας μπορεί να καταλήξει ως κεφαλίδες στηλών σας. Για να το αποφύγετε, χρησιμοποιήστε το rio :: εισαγωγή ("mySpreadsheet.xlsx", col_names = FALSE) έτσι το R θα δημιουργήσει προεπιλεγμένες κεφαλίδες των X0, X1, X2 και ούτω καθεξής. Ή, χρησιμοποιήστε μια σύνταξη όπως rio :: import ("mySpreadsheet.xlsx", col_names = c ("Πόλη", "Πολιτεία", "Πληθυσμός")) για να ορίσετε τα δικά σας ονόματα στηλών.

Εάν υπάρχουν πολλές καρτέλες στο υπολογιστικό φύλλο σας, το οι οποίες Το όρισμα παρακάμπτει την προεπιλογή της ανάγνωσης στο πρώτο φύλλο εργασίας. rio :: εισαγωγή ("mySpreadsheet.xlsx", το οποίο = 2) διαβάζει στο δεύτερο φύλλο εργασίας.

Τι είναι το πλαίσιο δεδομένων; Και τι μπορείτε να κάνετε με ένα;

Το rio εισάγει ένα υπολογιστικό φύλλο ή ένα αρχείο CSV ως R πλαίσιο δεδομένων. Πώς ξέρετε αν έχετε ένα πλαίσιο δεδομένων; Σε περίπτωση που snowdata, τάξη (snowdata) επιστρέφει την κλάση ή τον τύπο αντικειμένου που είναι. str (snowdata) σας λέει επίσης την τάξη και προσθέτει λίγο περισσότερες πληροφορίες. Πολλές από τις πληροφορίες που βλέπετε str () είναι παρόμοιο με αυτό που είδατε για αυτό το παράδειγμα στο παράθυρο περιβάλλοντος RStudio: snowdata έχει 76 παρατηρήσεις (σειρές) και δύο μεταβλητές (στήλες).

Τα πλαίσια δεδομένων μοιάζουν με υπολογιστικά φύλλα, καθώς έχουν στήλες και σειρές. Ωστόσο, τα πλαίσια δεδομένων είναι πιο δομημένα. Κάθε στήλη σε ένα πλαίσιο δεδομένων είναι R διάνυσμα, το οποίο σημαίνει ότι κάθε στοιχείο σε μια στήλη πρέπει να έχει τον ίδιο τύπο δεδομένων. Μια στήλη μπορεί να είναι όλοι οι αριθμοί και μια άλλη στήλη μπορεί να είναι όλες οι συμβολοσειρές, αλλά μέσα σε μια στήλη, τα δεδομένα πρέπει να είναι συνεπή.

Εάν έχετε μια στήλη πλαισίου δεδομένων με τις τιμές 5, 7, 4 και "τιμή που θα έρθει", το R δεν θα είναι απλά δυσαρεστημένο και θα σας δώσει σφάλμα. Αντ 'αυτού, θα εξαναγκάσει όλες τις τιμές σας να είναι ο ίδιος τύπος δεδομένων. Επειδή το "value to come" δεν μπορεί να μετατραπεί σε αριθμό, τα 5, 7 και 4 θα καταλήξουν να μετατραπούν σε χαρακτήρες "5", "7", και "4". Συνήθως δεν είναι αυτό που θέλετε, επομένως είναι σημαντικό να γνωρίζετε τι είδους δεδομένα είναι σε κάθε στήλη. Μια τιμή συμβολοσειράς αδέσποτου χαρακτήρα σε μια στήλη 1.000 αριθμών μπορεί να μετατρέψει το σύνολο σε χαρακτήρες. Αν θέλετε αριθμούς, βεβαιωθείτε ότι τους έχετε!

Το R έχει τρόπους αναφοράς σε ελλείποντα δεδομένα που δεν θα βλάψουν τις υπόλοιπες στήλες σας: ΝΑ σημαίνει "μη διαθέσιμο".

Τα πλαίσια δεδομένων είναι ορθογώνια: Κάθε σειρά πρέπει να έχει τον ίδιο αριθμό καταχωρήσεων (αν και μερικές μπορεί να είναι κενές) και κάθε στήλη πρέπει να έχει τον ίδιο αριθμό στοιχείων.

Οι στήλες του υπολογιστικού φύλλου Excel αναφέρονται συνήθως με γράμματα: Στήλη Α, Στήλη Β κ.λπ. Μπορείτε να ανατρέξετε σε μια στήλη πλαισίου δεδομένων με το όνομά της, χρησιμοποιώντας τη σύνταξη dataFrameName $ columnName. Έτσι, εάν πληκτρολογείτε snowdata $ Σύνολο και πατήστε Enter, βλέπετε όλες τις τιμές στο Σύνολο στήλη, όπως φαίνεται στο παρακάτω σχήμα. (Γι 'αυτό όταν τρέχετε το str (snowdata) εντολή, υπάρχει ένα σύμβολο δολαρίου πριν από το όνομα κάθε στήλης.)

Όμιλος Taylor & Francis

Υπενθύμιση ότι αυτοί οι παρενθετικοί αριθμοί στα αριστερά της καταχώρισης δεν αποτελούν μέρος των δεδομένων. απλώς σας λένε με ποια θέση ξεκινά κάθε γραμμή δεδομένων. [1] σημαίνει ότι η γραμμή ξεκινά με το πρώτο στοιχείο του διανύσματος, [10] το δέκατο κ.λπ.

Η ολοκλήρωση της καρτέλας RStudio λειτουργεί με ονόματα στηλών πλαισίου δεδομένων, καθώς και ονόματα αντικειμένων και λειτουργιών. Αυτό είναι πολύ χρήσιμο για να βεβαιωθείτε ότι δεν ορθογραφείτε το όνομα μιας στήλης και δεν σπάτε το σενάριό σας - και εξοικονομεί επίσης την πληκτρολόγηση εάν έχετε μεγάλα ονόματα στηλών.

Τύπος snowdata $ και περιμένετε, τότε θα δείτε μια λίστα με όλα τα ονόματα των στηλών στα snowdata.

Είναι εύκολο να προσθέσετε μια στήλη σε ένα πλαίσιο δεδομένων. Επί του παρόντος, το Σύνολο Η στήλη δείχνει χειμερινές χιονοπτώσεις σε ίντσες. Για να προσθέσετε μια στήλη που δείχνει σύνολα σε μέτρα, μπορείτε να χρησιμοποιήσετε αυτήν τη μορφή:

snowdata $ Meters <- snowdata $ Σύνολο * 0,0254

Το όνομα της νέας στήλης βρίσκεται στα αριστερά και υπάρχει ένας τύπος στα δεξιά. Στο Excel, ίσως να έχετε χρησιμοποιήσει = A2 * 0,0254 και στη συνέχεια αντιγράψαμε τον τύπο κάτω από τη στήλη. Με ένα σενάριο, δεν χρειάζεται να ανησυχείτε αν έχετε εφαρμόσει σωστά τον τύπο σε όλες τις τιμές της στήλης.

Τώρα κοίτα το δικό σου snowdata αντικείμενο στην καρτέλα Περιβάλλον. Θα πρέπει να έχει μια τρίτη μεταβλητή, Μετρητές.

Επειδή snowdata είναι ένα πλαίσιο δεδομένων, έχει ορισμένες ιδιότητες πλαισίου δεδομένων στις οποίες μπορείτε να έχετε πρόσβαση από τη γραμμή εντολών. nrow (snowdata) σας δίνει τον αριθμό των σειρών και ncol (snowdata) ο αριθμός των στηλών. Ναι, μπορείτε να το δείτε στο περιβάλλον RStudio για να δείτε πόσες παρατηρήσεις και μεταβλητές υπάρχουν, αλλά πιθανότατα θα υπάρξουν στιγμές που θα θέλατε να το γνωρίζετε ως μέρος ενός σεναρίου. ονόματα (snowdata) ή ονόματα (snowdata) σου δίνει το όνομα του snowdata στήλες. rownames (snowdata) θα σας δώσει οποιαδήποτε ονόματα σειρών (εάν δεν έχουν οριστεί, θα προεπιλεγεί στις συμβολοσειρές χαρακτήρων του αριθμού σειράς όπως "1", "2", "3", και τα λοιπά.).

Μερικές από αυτές τις ειδικές λειτουργίες του πλαισίου δεδομένων, επίσης γνωστές ως μεθόδους, όχι μόνο να σας δώσει πληροφορίες, αλλά σας επιτρέπει να αλλάξετε τα χαρακτηριστικά του πλαισίου δεδομένων. Ετσι, ονόματα (snowdata) σας λέει τα ονόματα των στηλών στο πλαίσιο δεδομένων, αλλά

ονόματα (snowdata) <- c ("Winter", "SnowInches", "SnowMeters")

αλλαγές τα ονόματα στηλών στο πλαίσιο δεδομένων.

Πιθανότατα δεν θα χρειαστεί να γνωρίζετε όλες τις διαθέσιμες μεθόδους για ένα αντικείμενο πλαισίου δεδομένων, αλλά αν είστε περίεργοι, μέθοδοι (class = class (snowdata)) τα εμφανίζει. Για να μάθετε περισσότερα σχετικά με οποιαδήποτε μέθοδο, εκτελέστε το συνηθισμένο ερώτημα βοήθειας με ένα ερωτηματικό, όπως ?συγχώνευση ή ?υποσύνολο.

Όταν ένας αριθμός δεν είναι πραγματικά ένας αριθμός

Οι ταχυδρομικοί κώδικες είναι ένα καλό παράδειγμα «αριθμών» που δεν πρέπει να αντιμετωπίζονται ως τέτοιοι. Αν και τεχνικά αριθμητικό, δεν έχει νόημα να κάνουμε πράγματα όπως να προσθέσουμε δύο ταχυδρομικούς κώδικες μαζί ή να λάβουμε κατά μέσο όρο ταχυδρομικούς κώδικες σε μια κοινότητα. Εάν εισαγάγετε μια στήλη ταχυδρομικού κώδικα, το R πιθανότατα θα το μετατρέψει σε στήλη αριθμών. Και αν ασχολείστε με περιοχές στη Νέα Αγγλία όπου οι ταχυδρομικοί κώδικες ξεκινούν με 0, το 0 θα εξαφανιστεί.

Έχω ένα οριοθετημένο με καρτέλα αρχείο των ταχυδρομικών ταχυδρομείων της Βοστώνης ανά γειτονιά, το οποίο κατεβάσατε από μια κυβερνητική υπηρεσία της Μασαχουσέτης, στη διεύθυνση //raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt. Αν προσπάθησα να το εισαγάγω με zips <- rio :: εισαγωγή ("bostonzips.txt"), οι ταχυδρομικοί κώδικες θα εισέρχονταν ως 2118, 2119, κ.λπ. και όχι 02118, 02119, και ούτω καθεξής.

Εδώ βοηθάει να μάθουμε λίγο για την υποκείμενη λειτουργία που είναι εισαγωγή() χρησιμοποιεί τη συνάρτηση. Μπορείτε να βρείτε αυτές τις υποκείμενες συναρτήσεις διαβάζοντας το εισαγωγή αρχείο βοήθειας στο ?εισαγωγή. Για λήψη αρχείων διαχωρισμένων με καρτέλες, εισαγωγή χρησιμοποιεί είτε δίχτυ () από το πακέτο data.table ή τη βάση R's read.table () λειτουργία. ο ; read.table Η βοήθεια λέει ότι μπορείτε να καθορίσετε τάξεις στηλών με το colClasses διαφωνία.

Δημιουργήστε έναν υποκατάλογο δεδομένων στον τρέχοντα κατάλογο έργου και, στη συνέχεια, πραγματοποιήστε λήψη του αρχείου bostonzips.txt με

download.file ("// raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt", "data / bostonzips.txt")

Εάν εισαγάγετε αυτό το αρχείο καθορίζοντας και τις δύο στήλες ως συμβολοσειρές χαρακτήρων, οι ταχυδρομικοί κώδικες θα διαμορφωθούν σωστά:

zips <- rio :: import ("data / bostonzips.txt", colClasses = c ("χαρακτήρας" "," χαρακτήρας ")) str (φερμουάρ)

Σημειώστε ότι οι κλάσεις στηλών πρέπει να ρυθμιστούν χρησιμοποιώντας το ντο() λειτουργία, c ("χαρακτήρας", "χαρακτήρας"). Εάν δοκιμάσατε colClasses, "χαρακτήρας", θα λάβετε ένα μήνυμα σφάλματος. Αυτό είναι ένα τυπικό σφάλμα για αρχάριους του R, αλλά δεν θα χρειαστεί πολύς χρόνος για να μπείτε στο ντο() συνήθεια.

Μια συμβουλή για τη σωτηρία: λίγα γράμματα c ("χαρακτήρας", "χαρακτήρας") δεν είναι τόσο δύσκολο. αλλά αν έχετε ένα υπολογιστικό φύλλο με 16 στήλες όπου οι πρώτες 14 πρέπει να είναι συμβολοσειρές χαρακτήρων, αυτό μπορεί να είναι ενοχλητικό. Ρ μαλλομέταξο ύφασμα() η λειτουργία μπορεί να βοηθήσει. μαλλομέταξο ύφασμα(), όπως ίσως μαντέψατε, επαναλαμβάνει ό, τι στοιχείο δώσετε, ωστόσο πολλές φορές το λέτε, χρησιμοποιώντας τη μορφή εκπρόσωπος (myitem, numtimes). εκπρόσωπος ("χαρακτήρας", 2) είναι το ίδιο με c ("χαρακτήρας", "χαρακτήρας"), Έτσι colClasses = rep ("χαρακτήρας", 2) είναι ισοδύναμο με colClasses = c ("χαρακτήρας", "χαρακτήρας") . Και, colClasses = c (rep ("χαρακτήρας", 14), rep ("αριθμητικό", 2)) ορίζει τις πρώτες 14 στήλες ως συμβολοσειρές χαρακτήρων και τις δύο τελευταίες ως αριθμούς. Όλα τα ονόματα των τάξεων στηλών εδώ πρέπει να είναι εισαγωγικά, επειδή τα ονόματα είναι συμβολοσειρές χαρακτήρων.

Σας προτείνω να παίξετε λίγο με μαλλομέταξο ύφασμα() ώστε να συνηθίσετε τη μορφή, καθώς είναι μια σύνταξη που χρησιμοποιούν και άλλες συναρτήσεις R.

Εύκολα δείγματα δεδομένων

Το R συνοδεύεται από ορισμένα ενσωματωμένα σύνολα δεδομένων που είναι εύχρηστα αν θέλετε να παίξετε με νέες λειτουργίες ή άλλες τεχνικές προγραμματισμού. Χρησιμοποιούνται επίσης πολύ από άτομα που διδάσκουν R, καθώς οι εκπαιδευτές μπορούν να είναι σίγουροι ότι όλοι οι μαθητές ξεκινούν με τα ίδια δεδομένα με την ίδια ακριβώς μορφή.

Τύπος δεδομένα() για να δείτε διαθέσιμα ενσωματωμένα σύνολα δεδομένων στη βάση R και ό, τι εγκατεστημένα πακέτα φορτώνονται αυτήν τη στιγμή. δεδομένα (πακέτο =. πακέτα (all.available = TRUE)) από τη βάση R εμφανίζει όλα τα πιθανά σύνολα δεδομένων από πακέτα που είναι εγκατεστημένα στο σύστημά σας, ανεξάρτητα από το εάν φορτώνονται ή όχι στη μνήμη στην τρέχουσα περίοδο λειτουργίας σας.

Μπορείτε να λάβετε περισσότερες πληροφορίες σχετικά με ένα σύνολο δεδομένων με τον ίδιο τρόπο που λαμβάνετε βοήθεια με τις λειτουργίες: Όνομα δεδομένων ή βοήθεια ("όνομα συνόλου δεδομένων"). Τα mtcars και η ίριδα είναι από αυτά που έχω δει πολύ συχνά.

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

Μπορείτε να αποθηκεύσετε αυτό το σύνολο δεδομένων σε άλλη μεταβλητή, αν θέλετε, με μορφή όπως cardata <- mtcars.

Εναλλακτικά, η εκτέλεση της λειτουργίας δεδομένων με το όνομα του συνόλου δεδομένων, όπως δεδομένα (mtcars), φορτώνει το σύνολο δεδομένων στο εργασιακό σας περιβάλλον.

Ένα από τα πιο ενδιαφέροντα πακέτα με δείγματα συνόλων δεδομένων για δημοσιογράφους είναι το πακέτο fivethirtyeight, το οποίο περιέχει δεδομένα από ιστορίες που δημοσιεύονται στον ιστότοπο FiveThirtyEight.com. Το πακέτο δημιουργήθηκε από πολλούς ακαδημαϊκούς σε συνεννόηση με τους συντάκτες του FiveThirtyEight. Έχει σχεδιαστεί για να είναι ένας πόρος για τη διδασκαλία προπτυχιακών στατιστικών.

Τα προσυσκευασμένα δεδομένα μπορεί να είναι χρήσιμα - και σε ορισμένες περιπτώσεις διασκεδαστικό. Ωστόσο, στον πραγματικό κόσμο, ενδέχεται να μην χρησιμοποιείτε δεδομένα που είναι τόσο βολικά συσκευασμένα.

Δημιουργήστε ένα πλαίσιο δεδομένων χειροκίνητα σε R

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

Τα πλαίσια δεδομένων R συναρμολογούνται από στήλη ανά στήλη από προεπιλογή, όχι από ένα σειρά κάθε φορά. Αν θέλετε να συγκεντρώσετε ένα γρήγορο πλαίσιο δεδομένων των αποτελεσμάτων των εκλογών στην πόλη, θα μπορούσατε να δημιουργήσετε ένα διάνυσμα ονομάτων υποψηφίων, ένα δεύτερο διάνυσμα με την κομματική τους ένωση και, στη συνέχεια, ένα διάνυσμα συνολικών ψήφων:

υποψήφιοι <- c ("Smith", "Jones", "Write-ins", "Blanks")

πάρτι <- c ("Δημοκρατικός", "Ρεπουμπλικανός", "", "")

ψήφοι <- c (15248, 16723, 230, 5234)

Μην ξεχνάτε να χρησιμοποιείτε κόμματα στους αριθμούς σας, όπως θα μπορούσατε να κάνετε στο Excel.

Για να δημιουργήσετε ένα πλαίσιο δεδομένων από αυτές τις στήλες, χρησιμοποιήστε το πλαίσιο δεδομένων() λειτουργία και το synatx data.frame (στήλη1, στήλη2, στήλη3).

myresults <- data.frame (υποψήφιοι, κόμμα, ψήφοι)

Ελέγξτε τη δομή του με str ():

str (myresults)

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

  1. Οι παράγοντες μπορούν να είναι χρήσιμοι εάν θέλετε να παραγγείλετε αντικείμενα με συγκεκριμένο, μη αλφαβητικό τρόπο για γραφήματα και άλλους σκοπούς, όπως Φτωχός είναι λιγότερο από Εκθεση είναι λιγότερο από Καλός είναι λιγότερο από Εξοχος.
  2. Οι παράγοντες μπορούν να συμπεριφέρονται διαφορετικά από ό, τι θα περίμενε κανείς κατά καιρούς. Συνιστώ να κολλήσετε με συμβολοσειρές χαρακτήρων, εκτός εάν έχετε έναν καλό λόγο να θέλετε συγκεκριμένους παράγοντες.

Μπορείτε να διατηρήσετε ανέπαφες τις συμβολοσειρές χαρακτήρων κατά τη δημιουργία πλαισίων δεδομένων προσθέτοντας το όρισμα stringsAsFactors = ΛΑΘΟΣ:

myresults <- data.frame (υποψήφιοι, κόμμα, ψήφοι, συμβολοσειρέςAsFactors = FALSE) str (myresults)

Τώρα, οι τιμές είναι αυτές που περιμένατε.

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

Ας πούμε, για παράδειγμα, ότι δημιουργήσατε στήλες αποτελεσμάτων εκλογών για υποψηφίους και κόμμα, αλλά εισήγαγε μόνο αποτελέσματα ψήφων για τον Σμιθ και τον Τζόουνς, όχι για εγγραφές και κενά. Μπορείτε να περιμένετε ότι το πλαίσιο δεδομένων θα εμφανίζει τις άλλες δύο καταχωρήσεις ως κενές, αλλά θα κάνεις λάθος. Δοκιμάστε το και δείτε, δημιουργώντας ένα νέο διάνυσμα ψήφων με δύο μόνο αριθμούς και χρησιμοποιώντας αυτό το νέο διάνυσμα ψήφων για να δημιουργήσετε ένα άλλο πλαίσιο δεδομένων:

ψήφοι <- c (15248, 16723)

myresults2 <- data.frame (υποψήφιοι, κόμμα, ψήφοι)

str (myresults2)

Σωστά, ο Ρ επαναχρησιμοποίησε τους δύο πρώτους αριθμούς, κάτι που είναι σίγουρα δεν αυτό που θα θέλατε. Εάν το δοκιμάσετε με τρεις αριθμούς στο διάνυσμα ψήφων αντί για δύο ή τέσσερις, το R θα έθετε σφάλμα. Αυτό συμβαίνει επειδή κάθε καταχώριση δεν μπορούσε να ανακυκλωθεί τον ίδιο αριθμό φορών.

Εάν μέχρι τώρα σκέφτεστε, "Γιατί δεν μπορώ να δημιουργήσω πλαίσια δεδομένων που δεν αλλάζουν αυτόματα συμβολοσειρές σε παράγοντες; Και γιατί πρέπει να ανησυχώ για τα πλαίσια δεδομένων που επαναχρησιμοποιούν τα δεδομένα μιας στήλης εάν ξεχάσω να ολοκληρώσω όλα τα δεδομένα; ​​" Ο Hadley Wickham είχε την ίδια σκέψη. Το πακέτο Tibble του δημιουργεί μια τάξη R, που ονομάζεται επίσης tibble, που λέει ότι είναι μια «σύγχρονη λήψη δεδομένων πλαισίων». Διατηρούν τις δυνατότητες που έχουν αντέξει στη δοκιμασία του χρόνου και απορρίπτουν τις λειτουργίες που ήταν βολικές αλλά τώρα είναι απογοητευτικές. "

Εάν αυτό σας ενδιαφέρει, εγκαταστήστε το πακέτο tibble εάν δεν υπάρχει στο σύστημά σας και, στη συνέχεια, προσπαθήστε να δημιουργήσετε ένα

myresults3 <- tibble :: tibble (υποψήφιοι, κόμμα, ψήφοι)

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

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

βιβλιοθήκη

ψήφοι <- c (15248, 16723, 230, 5234)

myresults3 <- θλίψη (υποψήφιοι, κόμμα, ψήφοι)

str (myresults3)

Μοιάζει με ένα πλαίσιο δεδομένων - στην πραγματικότητα, είναι είναι ένα πλαίσιο δεδομένων, αλλά με ορισμένες ειδικές συμπεριφορές, όπως τον τρόπο εκτύπωσης. Σημειώστε επίσης ότι η στήλη υποψηφίων είναι συμβολοσειρές χαρακτήρων και όχι παράγοντες.

Αν σας αρέσει αυτή η συμπεριφορά, προχωρήστε και χρησιμοποιήστε ταμπλέτες. Ωστόσο, δεδομένου του τρόπου με τον οποίο τα συμβατικά πλαίσια δεδομένων παραμένουν στο R, είναι ακόμη σημαντικό να γνωρίζουμε τις προεπιλεγμένες συμπεριφορές τους.

Εξαγωγή δεδομένων

Συχνά, αφού έχετε αναδιοργανώσει τα δεδομένα σας στο R, θέλετε να αποθηκεύσετε τα αποτελέσματά σας. Ακολουθούν ορισμένοι από τους τρόπους εξαγωγής των δεδομένων σας που τείνω να χρησιμοποιώ περισσότερο:

Αποθήκευση σε αρχείο CSV με rio :: εξαγωγή (myObjectName, file = "myFileName.csv") και σε ένα αρχείο Excel με rio :: εξαγωγή (myObjectName, file = "myFileName.xlsx"). Το rio κατανοεί τη μορφή αρχείου που θέλετε με βάση την επέκταση του ονόματος αρχείου. Υπάρχουν πολλές άλλες διαθέσιμες μορφές, όπως .tsv για δεδομένα διαχωρισμένα με καρτέλες, . json για JSON και .xml για XML.

Αποθήκευση σε δυαδικό αντικείμενο R που διευκολύνει τη φόρτωση πίσω στο R σε μελλοντικές συνεδρίες. Υπάρχουν δύο επιλογές.

Γενικός σώσει() αποθηκεύει ένα ή περισσότερα αντικείμενα σε ένα αρχείο, όπως αποθήκευση (objectName1, objectName2, file = "myfilename.RData"). Για να διαβάσετε αυτά τα δεδομένα πίσω στο R, απλώς χρησιμοποιείτε την εντολή φόρτωση ("myfilename.RData") και όλα τα αντικείμενα επιστρέφουν με τα ίδια ονόματα στην ίδια κατάσταση που είχαν πριν.

Μπορείτε επίσης να αποθηκεύσετε ένα μεμονωμένο αντικείμενο σε ένα αρχείο με saveRDS (myobject, file = "filename.rds"). Η λογική υπόθεση είναι ότι το loadRDS θα διαβάσει ξανά το αρχείο, αλλά αντίθετα η εντολή είναι ΔιαβάστεRDS—Και σε αυτήν την περίπτωση, μόνο τα δεδομένα έχουν αποθηκευτεί, όχι το όνομα του αντικειμένου. Επομένως, πρέπει να διαβάσετε τα δεδομένα σε ένα νέο όνομα αντικειμένου, όπως mydata <- readRDS ("filename.rds").

Υπάρχει ένας τρίτος τρόπος αποθήκευσης ενός αντικειμένου R ειδικά για το R: δημιουργία των εντολών R που θα αναδημιουργούσαν το αντικείμενο αντί του αντικειμένου με τελικά αποτελέσματα. Οι βασικές λειτουργίες R για τη δημιουργία ενός αρχείου R για την αναδημιουργία ενός αντικειμένου είναι έξοδος () ή εγκαταλείπω(). Ωστόσο, βρίσκω rio :: εξαγωγή (myobject, "mysavedfile.R") ακόμη πιο εύκολο να το θυμάστε.

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

Μπορείτε επίσης να εξαγάγετε ένα αντικείμενο R στο πρόχειρο των Windows ή Mac με rio: rio :: εξαγωγή (myObjectName, μορφή). Και, μπορείτε να εισαγάγετε δεδομένα στο R από το πρόχειρο με τον ίδιο τρόπο: rio :: εισαγωγή (αρχείο).

Μπόνους: rio's μετατρέπω() Η λειτουργία σάς επιτρέπει - το μαντέψατε - να μετατρέψετε έναν τύπο αρχείου σε έναν άλλο χωρίς να χρειάζεται να τραβήξετε με μη αυτόματο τρόπο τα δεδομένα και στη συνέχεια από το R. Δείτε ?μετατρέπω για περισσότερες πληροφορίες.

Τελικό σημείο: Το RStudio σας επιτρέπει να κάνετε κλικ για να εισαγάγετε ένα αρχείο, χωρίς να χρειάζεται να γράψετε κώδικα. Δεν είναι κάτι που προτείνω έως ότου εισαγάγετε άνετα από τη γραμμή εντολών, γιατί νομίζω ότι είναι σημαντικό να κατανοήσετε τον κώδικα πίσω από την εισαγωγή. Όμως, παραδέχομαι ότι αυτό μπορεί να είναι μια εύχρηστη συντόμευση.

Στην καρτέλα Αρχεία του κάτω δεξιού παραθύρου του RStudio, μεταβείτε στο αρχείο που θέλετε να εισαγάγετε και κάντε κλικ σε αυτό. Θα δείτε μια επιλογή είτε Προβολή αρχείου είτε Εισαγωγή συνόλου δεδομένων. Επιλέξτε Εισαγωγή συνόλου δεδομένων για να δείτε ένα διάλογο που κάνει προεπισκόπηση των δεδομένων, σας επιτρέπει να τροποποιήσετε τον τρόπο εισαγωγής των δεδομένων και να κάνετε προεπισκόπηση του κώδικα που θα δημιουργηθεί.

Κάντε οποιεσδήποτε αλλαγές θέλετε και κάντε κλικ στο Εισαγωγή και τα δεδομένα σας θα τραβηχτούν στο R.

Επιπρόσθετοι πόροι

εναλλακτικές λύσεις. Ενώ το rio είναι ένα εξαιρετικό μαχαίρι Ελβετικού Στρατού για τη διαχείριση αρχείων, μπορεί να υπάρχουν στιγμές που θέλετε λίγο περισσότερο έλεγχο για τον τρόπο με τον οποίο τα δεδομένα σας τραβούν ή αποθηκεύονται από το R. Επιπλέον, υπήρξαν στιγμές που είχα μια πρόκληση αρχείο δεδομένων στο οποίο πνιγεί ο Ρίο, αλλά ένα άλλο πακέτο θα μπορούσε να το χειριστεί. Ορισμένες άλλες λειτουργίες και πακέτα που μπορεί να θέλετε να εξερευνήσετε:

  • Βάση R's read.csv () και read.table () για εισαγωγή αρχείων κειμένου (χρήση ? read.csv και ; read.table για περισσότερες πληροφορίες). stringsAsFactors = ΛΑΘΟΣ απαιτείται με αυτά εάν θέλετε να διατηρήσετε τις συμβολοσειρές χαρακτήρων σας ως συμβολοσειρές χαρακτήρων. write.csv () αποθηκεύει στο CSV.
  • Το rio χρησιμοποιεί το πακέτο readxl του Hadley Wickham για την ανάγνωση αρχείων Excel. Μια άλλη εναλλακτική λύση για το Excel είναι το openxlsx, το οποίο μπορεί να γράψει σε ένα αρχείο Excel καθώς και να το διαβάσει. Ανατρέξτε στα σύντομα χρονογραφήματα του πακέτου openxlsx για πληροφορίες σχετικά με τη μορφοποίηση των υπολογιστικών φύλλων κατά την εξαγωγή.
  • Το πακέτο ανάγνωσης του Wickham αξίζει επίσης να δούμε ως μέρος του "tidyverse". Το readr περιλαμβάνει λειτουργίες ανάγνωσης CSV, διαχωρισμένων με καρτέλες, σταθερού πλάτους, αρχείων καταγραφής ιστού και πολλών άλλων τύπων αρχείων. Το readr εκτυπώνει τον τύπο των δεδομένων που έχει καθορίσει για κάθε στήλη - ακέραιος, χαρακτήρας, διπλός (μη ακέραιοι αριθμοί) κ.λπ. Δημιουργεί ανατροπές.

Εισαγωγή απευθείας από ένα υπολογιστικό φύλλο Google. Το πακέτο googlesheets σάς επιτρέπει να εισάγετε δεδομένα από ένα υπολογιστικό φύλλο των Φύλλων Google, ακόμη και αν είναι ιδιωτικό, με τον έλεγχο ταυτότητας του λογαριασμού σας Google. Το πακέτο είναι διαθέσιμο στο CRAN. εγκαταστήστε το μέσωinstall.packages ("googlesheets"). Αφού το φορτώσετε με βιβλιοθήκη ("googlesheets"), διαβάστε το εξαιρετικό εισαγωγικό σύντομο χρονογράφημα. Κατά τη στιγμή αυτής της γραφής, το εισαγωγικό σύντομο χρονογράφημα ήταν διαθέσιμο στο R at σύντομο χρονογράφημα ("βασική χρήση", πακέτο = "googlesheets"). Εάν δεν το βλέπετε, δοκιμάστε βοήθεια (πακέτο = "googlesheets") και κάντε κλικ στο σύνδεσμο Οδηγοί χρήστη, βινιέτες πακέτου και άλλη τεκμηρίωση για διαθέσιμα χρονογραφήματα ή ανατρέξτε στις πληροφορίες του πακέτου στο GitHub στη διεύθυνση //github.com/jennybc/googlesheets.

Ξύστε δεδομένα από ιστοσελίδες με το πακέτο rvest και την επέκταση προγράμματος περιήγησης SelectorGadget ή σελιδοδείκτη JavaScript. Το SelectorGadget σάς βοηθά να ανακαλύψετε τα στοιχεία CSS των δεδομένων που θέλετε να αντιγράψετε σε μια σελίδα HTML. τότε το rvest χρησιμοποιεί το R για να βρει και να αποθηκεύσει αυτά τα δεδομένα. Αυτή δεν είναι μια τεχνική για αρχάριους, αλλά μόλις αποκτήσετε κάποια εμπειρία στο R, ίσως θελήσετε να επιστρέψετε και να την επισκεφτείτε ξανά. Έχω μερικές οδηγίες και ένα βίντεο για το πώς να το κάνω αυτό στο //bit.ly/Rscraping. Το RStudio διαθέτει επίσης διαδικτυακό σεμινάριο κατά παραγγελία.

Εναλλακτικές λύσεις στη βάση των λειτουργιών αποθήκευσης και ανάγνωσης του R. Εάν εργάζεστε με μεγάλα σύνολα δεδομένων, η ταχύτητα μπορεί να γίνει σημαντική για εσάς κατά την αποθήκευση και τη φόρτωση αρχείων. Το πακέτο data.table έχει γρήγορο δίχτυ () Λειτουργία, αλλά προσέξτε ότι τα προκύπτοντα αντικείμενα είναι δεδομένα. πίνακες και όχι απλά πλαίσια δεδομένων. μερικές συμπεριφορές είναι διαφορετικές. Εάν θέλετε ένα συμβατικό πλαίσιο δεδομένων, μπορείτε να το αποκτήσετε με το as.data.frame (mydatatable) σύνταξη. Το πακέτο data.table είναι fwrite () Η συνάρτηση στοχεύει στην εγγραφή σε ένα αρχείο CSV πολύ πιο γρήγορα από το βασικό R write.csv ().

Δύο άλλα πακέτα μπορεί να ενδιαφέρουν την αποθήκευση και ανάκτηση δεδομένων. Το πακέτο φτερών αποθηκεύει σε δυαδική μορφή που μπορεί να διαβαστεί είτε σε R είτε Python. Και, το πρώτο πακέτο read.fst () και write.fst () Προσφέρετε γρήγορη αποθήκευση και φόρτωση αντικειμένων πλαισίου δεδομένων R - συν την επιλογή συμπίεσης αρχείων.