R Data Frame: Τρόπος δημιουργίας, προσθήκης, επιλογής και υποομάδας
⚡ Έξυπνη Σύνοψη
Το R Data Frame αποθηκεύει στήλες διαφορετικών τύπων σε ίσο μήκος, γεγονός που το καθιστά την τυπική ορθογώνια δομή για ανάλυση. Οι αγκύλες κόβουν γραμμές και στήλες, το σύμβολο του δολαρίου φτάνει σε μια στήλη και το subset() φιλτράρει κατά συνθήκη.

Τι είναι ένα πλαίσιο δεδομένων;
A πλαίσιο δεδομένων είναι μια λίστα διανυσμάτων που έχουν ίσο μήκος. Ένας πίνακας περιέχει μόνο έναν τύπο δεδομένων, ενώ ένα πλαίσιο δεδομένων δέχεται διαφορετικούς τύπους δεδομένων (αριθμητικά, χαρακτήρων, παραγόντων κ.λπ.).
Αυτός ο ορισμός τοποθετεί το πλαίσιο δεδομένων μεταξύ δύο γειτόνων που θα συναντάτε συνεχώς στο R. A. μήτρα είναι ορθογώνιο αλλά μονοτυπικό, και ένα λίστα είναι πολλαπλού τύπου αλλά ακανόνιστο. Το πλαίσιο δεδομένων δανείζεται μία ιδιότητα από το καθένα.
| Structure | Τύποι στηλών | Μήκη στοιχείων | Τυπική χρήση |
|---|---|---|---|
| διάνυσμα | Μόνο ένας τύπος | Μία ακολουθία | Μία μεταβλητή |
| Μήτρα | Μόνο ένας τύπος | Ορθογώνιος | Αριθμητική άλγεβρα |
| Λιστα | Οποιοδήποτε μείγμα τύπων | Μπορεί να διαφέρει ανά στοιχείο | Αυθαίρετες εισπράξεις |
| Πλαίσιο δεδομένων | Οποιοδήποτε μείγμα τύπων | Κάθε στήλη έχει ίσο μήκος | Πινακική ανάλυση |
Επειδή ένα πλαίσιο δεδομένων είναι στην πραγματικότητα μια λίστα από κάτω, τα accessors που χρησιμοποιούνται στις λίστες λειτουργούν και εδώ, γι' αυτό και το σύμβολο του δολαρίου εμφανίζεται ξανά αργότερα σε αυτό το σεμινάριο.
Πώς να δημιουργήσετε ένα πλαίσιο δεδομένων
Μπορούμε να δημιουργήσουμε ένα πλαίσιο δεδομένων στο R περνώντας τις μεταβλητές a, b, c και d στη συνάρτηση data.frame(). Μπορούμε να δημιουργήσουμε το πλαίσιο δεδομένων και να ονομάσουμε τις στήλες με names(), απλώς καθορίζοντας το όνομα κάθε μεταβλητής.
data.frame(df, stringsAsFactors = TRUE)
Επιχειρήματα:
- df: Μπορεί να είναι ένας πίνακας για μετατροπή ως πλαίσιο δεδομένων ή μια συλλογή μεταβλητών προς ένταξη
- stringsAsFactors: Ελέγχει εάν τα διανύσματα χαρακτήρων γίνονται στήλες παραγόντων. Η εργοστασιακή προεπιλογή ήταν TRUE σε παλαιότερες εκδόσεις και έχει οριστεί σε FALSE από την R 4.0.0, επομένως διαβιβάζεται ρητά όταν η συμπεριφορά έχει σημασία.
Μπορούμε να δημιουργήσουμε ένα πλαίσιο δεδομένων στο R για το πρώτο μας σύνολο δεδομένων συνδυάζοντας τέσσερις μεταβλητές ίδιου μήκους.
# Create a, b, c, d variables a <- c(10,20,30,40) b <- c('book', 'pen', 'textbook', 'pencil_case') c <- c(TRUE,FALSE,TRUE,FALSE) d <- c(2.5, 8, 10, 7) # Join the variables to create a data frame df <- data.frame(a,b,c,d) df
Παραγωγή:
## a b c d ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Κάθε διάνυσμα έγινε στήλη και οι τέσσερις τιμές σε κάθε διάνυσμα έγιναν οι τέσσερις γραμμές. Σημειώστε ότι τα ορίσματα δεν είχαν όνομα, επομένως η R άντλησε τις κεφαλίδες των στηλών από τα ίδια τα ονόματα των μεταβλητών.
Μπορούμε να δούμε ότι οι κεφαλίδες στηλών έχουν το ίδιο όνομα με τις μεταβλητές. Μπορούμε να αλλάξουμε το όνομα της στήλης στο R με τα ονόματα συναρτήσεων(). Ελέγξτε το παράδειγμα R δημιουργία πλαισίου δεδομένων παρακάτω:
# Name the data frame names(df) <- c('ID', 'items', 'store', 'price') df
Παραγωγή:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Η ανάθεση σε names() αντικαθιστά κάθε κεφαλίδα ταυτόχρονα, επομένως το διάνυσμα αντικατάστασης πρέπει να έχει ακριβώς μία καταχώρηση ανά στήλη. Για να μετονομάσετε μια μόνο στήλη, δημιουργήστε ευρετήριο στο διάνυσμα names, όπως στο names(df)[2] <- 'product'.
# Print the structure
str(df)
Παραγωγή:
## 'data.frame': 4 obs. of 4 variables: ## $ ID : num 10 20 30 40 ## $ items: Factor w/ 4 levels "book","pen","pencil_case",..: 1 2 4 3 ## $ store: logi TRUE FALSE TRUE FALSE ## $ price: num 2.5 8 10 7
Σημείωση έκδοσης. Η παραπάνω έξοδος δημιουργήθηκε σε μια έκδοση R παλαιότερη από την έκδοση 4.0.0, όπου η data.frame() μετέτρεπε τα διανύσματα χαρακτήρων σε παράγοντες από προεπιλογή, γι' αυτό και τα στοιχεία αναφέρονται ως Παράγοντας με τέσσερα επίπεδα. Η βασική τεκμηρίωση της R καταγράφει ότι αυτή η εργοστασιακά νέα προεπιλογή άλλαξε σε stringsAsFactors = FALSE για R 4.0.0Η εκτέλεση του ίδιου κώδικα σε μια τρέχουσα έκδοση αφήνει τα στοιχεία ως στήλη απλών χαρακτήρων και η str() εκτυπώνει chr αντί αυτού. Προσθέστε stringsAsFactors = TRUE στην κλήση data.frame() για να αναπαράγετε την εκτυπωμένη έξοδο ή να διαβάσετε το φροντιστήριο παράγοντα για όταν οι παράγοντες είναι πραγματικά επιθυμητοί.
Slice Data Frame
Αφού κατασκευαστεί το πλαίσιο, η επόμενη εργασία είναι να τραβήξουμε τμήματα αυτού προς τα έξω. Η τομή είναι ο βασικός τρόπος R για να το κάνουμε αυτό και χρησιμοποιεί τις ίδιες αγκύλες με τα διανύσματα, μόνο με δύο θέσεις αντί για μία.
Είναι δυνατό να κάνουμε τεμαχισμό τιμών ενός Πλαισίου Δεδομένων (Data Frame). Επιλέγουμε τις γραμμές και τις στήλες που θα επιστραφούν μέσα σε αγκύλες που προηγούνται από το όνομα του πλαισίου δεδομένων.
Ένα πλαίσιο δεδομένων αποτελείται από γραμμές και στήλες, df[A, B]. Το Α αντιπροσωπεύει τις γραμμές και το Β τις στήλες. Μπορούμε να κάνουμε φέτες είτε καθορίζοντας τις γραμμές και/ή τις στήλες.
Από την εικόνα 1 παρακάτω, το αριστερό μέρος αντιπροσωπεύει το σειρές, και το δεξί μέρος είναι το στήλες. Σημειώστε ότι το σύμβολο : σημαίνει προς την. Για παράδειγμα, το 1:3 σκοπεύει να επιλέξει τιμές από το 1 προς την 3.
Στο παρακάτω διάγραμμα παρουσιάζουμε τον τρόπο πρόσβασης σε διαφορετικές επιλογές του πλαισίου δεδομένων:
- Το κίτρινο βέλος επιλέγει το σειρά 1 σε στήλη 2
- Το πράσινο βέλος επιλέγει το σειρές από 1 έως 2
- Το κόκκινο βέλος επιλέγει το στήλη 1
- Το μπλε βέλος επιλέγει το σειρές 1 έως 3 και στήλες από 3 έως 4
Σημειώστε ότι, αν αφήσουμε το αριστερό μέρος κενό, το R θα επιλέξει όλες οι σειρές. Κατ' αναλογία, αν αφήσουμε το δεξί μέρος κενό, το R θα επιλέξει όλες οι στήλες.
Μπορούμε να εκτελέσουμε τον κώδικα στην κονσόλα:
## Select row 1 in column 2
df[1,2]
Παραγωγή:
## [1] book ## Levels: book pen pencil_case textbook
Η γραμμή Επίπεδα εμφανίζεται επειδή τα στοιχεία είναι ένας παράγοντας σε αυτήν την συνεδρία. Στην έκδοση R 4.0.0 και νεότερες εκδόσεις, η ίδια κλήση εκτυπώνει τη μοναδική συμβολοσειρά «βιβλίο» χωρίς γραμμή Επίπεδα.
## Select Rows 1 to 2
df[1:2,]
Παραγωγή:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0
## Select Columns 1
df[,1]
Παραγωγή:
## [1] 10 20 30 40
Η επιλογή μίας μόνο στήλης με df[,1] αποσύρει το περιτύλιγμα πλαισίου και επιστρέφει ένα απλό διάνυσμα. Προσθέστε drop = FALSE, όπως στο df[, 1, drop = FALSE], όταν χρειάζεται ένα πλαίσιο δεδομένων μίας στήλης.
## Select Rows 1 to 3 and columns 3 to 4
df[1:3, 3:4]
Παραγωγή:
## store price ## 1 TRUE 2.5 ## 2 FALSE 8.0 ## 3 TRUE 10.0
Είναι επίσης δυνατό να επιλέξετε τις στήλες με τα ονόματά τους. Για παράδειγμα, ο παρακάτω κώδικας π.χ.tracts δύο στήλες: ID και store.
# Slice with columns name df[, c('ID', 'store')]
Παραγωγή:
## ID store ## 1 10 TRUE ## 2 20 FALSE ## 3 30 TRUE ## 4 40 FALSE
Τα ονόματα είναι ασφαλέστερα από τις θέσεις στον κώδικα παραγωγής, επειδή η εισαγωγή ή η αναδιάταξη μιας στήλης αλλάζει σιωπηλά αυτό στο οποίο αναφέρεται η συνάρτηση df[, 3], ενώ η συνάρτηση df[, 'store'] συνεχίζει να δείχνει στα ίδια δεδομένα.
Προσθήκη στήλης στο πλαίσιο δεδομένων
Μπορείτε επίσης να προσθέσετε μια στήλη σε ένα Data Frame. Πρέπει να χρησιμοποιήσετε το σύμβολο $ για να ονομάσετε τη νέα μεταβλητή και να προσθέσετε μια στήλη σε ένα dataframe στην R.
# Create a new vector quantity <- c(10, 35, 40, 5) # Add `quantity` to the `df` data frame df$quantity <- quantity df
Παραγωγή:
## ID items store price quantity ## 1 10 book TRUE 2.5 10 ## 2 20 pen FALSE 8.0 35 ## 3 30 textbook TRUE 10.0 40 ## 4 40 pencil_case FALSE 7.0 5
Σημείωση: Ο αριθμός των στοιχείων στο διάνυσμα πρέπει να είναι ίσος με τον αριθμό των στοιχείων στο πλαίσιο δεδομένων. Εκτελώντας την ακόλουθη εντολή για να προσθέσετε μια στήλη στο πλαίσιο δεδομένων στην R
quantity <- c(10, 35, 40)
# Add `quantity` to the `df` data frame
df$quantity <- quantity
Δίνει σφάλμα:
Error in `lt;-.data.frame`(`*tmp*`, quantity, value = c(10, 35, 40))
replacement has 3 rows, data has 4
Το μήνυμα ονομάζει τον τελεστή αντικατάστασης για τα πλαίσια δεδομένων και δηλώνει και τους δύο αριθμούς, επομένως σας λέει ακριβώς τι πρέπει να διορθώσετε. Η R ανακυκλώνει μια αντικατάσταση μόνο όταν το μήκος της διαιρεί τον αριθμό των γραμμών ομοιόμορφα, γι' αυτό και μια τιμή μήκους-1, όπως df$currency <- 'EUR', γίνεται δεκτή, ενώ ένα διάνυσμα μήκους-3 έναντι τεσσάρων γραμμών απορρίπτεται. Η cbind() προσθέτει μια στήλη με τον ίδιο τρόπο και η rbind() είναι η αντίστοιχη για την προσθήκη γραμμών.
Επιλέξτε μια στήλη ενός πλαισίου δεδομένων
Μερικές φορές, χρειάζεται να αποθηκεύσουμε μια στήλη ενός πλαισίου δεδομένων για μελλοντική χρήση ή να εκτελέσουμε μια λειτουργία σε μια στήλη. Μπορούμε να χρησιμοποιήσουμε το σύμβολο $ για να επιλέξουμε τη στήλη από ένα πλαίσιο δεδομένων.
# Select the column ID
df$ID
Παραγωγή:
## [1] 1 2 3 4
Διαβάστε προσεκτικά αυτήν την έξοδο. Το ID δημιουργήθηκε από το διάνυσμα c(10, 20, 30, 40), επομένως μια κονσόλα ζωντανής εκτέλεσης εκτυπώνει 10 20 30 40 εδώ. Τα 1 2 3 4 που φαίνονται παραπάνω είναι θέσεις γραμμών και όχι οι αποθηκευμένες τιμές. Το [1] στην αρχή της γραμμής είναι απλώς ο δείκτης του πρώτου στοιχείου σε αυτήν τη γραμμή, όχι μέρος των δεδομένων.
Τρεις διαδρομές φτάνουν στην ίδια στήλη: df$ID, df[['ID']] και df[, 'ID']. Το σύμβολο του δολαρίου εκτελεί μερική αντιστοίχιση, επομένως το df$I θα εξακολουθεί να βρίσκει το ID, κάτι που είναι βολικό στην κονσόλα και επικίνδυνο σε ένα αποθηκευμένο σενάριο.
Υποορίστε ένα πλαίσιο δεδομένων
Στην προηγούμενη ενότητα, επιλέξαμε μια ολόκληρη στήλη χωρίς όρους. Είναι δυνατόν να υποσύνολο με βάση το αν μια συγκεκριμένη συνθήκη ήταν αληθής ή όχι.
Χρησιμοποιούμε τη συνάρτηση subset().
subset(x, condition) arguments: - x: data frame used to perform the subset - condition: define the conditional statement
Θέλουμε να επιστρέψουμε μόνο τα προϊόντα με τιμή άνω του 5, επομένως μπορούμε να κάνουμε τα εξής:
# Select price above 5
subset(df, subset = price > 5)
Παραγωγή:
ID items store price 2 20 pen FALSE 8 3 30 textbook TRUE 10 4 40 pencil_case FALSE 7
Οι ετικέτες γραμμών 2, 3 και 4 είναι τα αρχικά ονόματα γραμμών που μεταφέρθηκαν από το df, και έτσι μπορείτε να καταλάβετε ότι η πρώτη γραμμή φιλτραρίστηκε. Η subset() δέχεται επίσης ένα όρισμα επιλογής για την επιλογή στηλών ταυτόχρονα και η ισοδύναμη μορφή αγκύλης είναι df[df$price > 5, ]. Η μορφή αγκύλης διατηρεί τις γραμμές NA όπου η συνθήκη λείπει, ενώ η subset() τις απορρίπτει, επομένως οι δύο δεν είναι πάντα εναλλάξιμες.

![Σύνταξη τεμαχισμού πλαισίου δεδομένων R df[A, B] με γραμμές αριστερά από το κόμμα και στήλες δεξιά](https://www.guru99.com/images/r_programming/032918_1452_RDataFrames1.png)
