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

Πώς να δημιουργήσετε πίνακες σε R με επεκτάσιμες σειρές

Διαδραστικοί πίνακες με αναζήτηση και ταξινόμηση μπορεί να είναι ένας καλός τρόπος εξερεύνησης δεδομένων. Και μερικές φορές, μπορεί να θέλετε να μοιραστείτε αυτά τα δεδομένα με άλλα άτομα - συμπεριλαμβανομένων δεδομένων μόνο κειμένου, όπως μια λίστα εκπαιδευτικών βίντεο Do More With R.

Αλλά όταν αυτά τα δεδομένα περιλαμβάνουν μια στήλη με αρκετά μεγάλες καταχωρήσεις, αυτή η στήλη μπορεί να μην ταιριάζει καλά σε έναν πίνακα στο πλάτος της οθόνης σας. Αυτό μπορεί να είναι ιδιαίτερα δύσκολο όταν κάθε σειρά δεν περιλαμβάνει την πολύ μεγάλη στήλη. Για παράδειγμα, ένας πίνακας αποτελεσμάτων ερωτηματολογίου όπου ένα πεδίο είναι "Έχετε επιπλέον σχόλια;" Δεν μπορούν όλοι.

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

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

Sharon Machlis,

Ας δούμε πώς να φτιάξετε ένα τραπέζι σαν αυτό.

Εάν θέλετε να ακολουθήσετε, εγκαταστήστε και φορτώστε το αντιδραστικό πακέτο. Για αυτήν την επίδειξη, θα χρειαστείτε επίσης τα πακέτα rio, κόλλα, htmltools και dplyr.

Μπορείτε να κατεβάσετε τα δεδομένα που θα χρησιμοποιήσω σε αυτήν την επίδειξη από τον παρακάτω σύνδεσμο. Είναι ένα μικρό σύνολο δεδομένων (15 σειρών) για το R και Συνεδρίες Python στο φετινό συνέδριο NICAR.

κατεβάστε το Do More With R Demo Set για πίνακες με επεκτάσιμες σειρές 15 σειρές πληροφοριών σχετικά με τις συνεδρίες R και Python στο συνέδριο δημοσιογραφίας δεδομένων NICAR 2020 Sharon Machlis

Φορτώστε αντιδρώντα και dplyr σε R

Στον παρακάτω κώδικα, φορτώνω αντιδρώσα και dplyr και μετά εισάγω τα δεδομένα μου χρησιμοποιώντας rio :: εισαγωγή ()

βιβλιοθήκη (αντιδραστική)

βιβλιοθήκη (dplyr)

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

Τα δεδομένα έχουν στήλες για το όνομα του πόρου (What), τον συγγραφέα (Who), TheURL, Tags, Type και Comments.

Στη συνέχεια, θέλω να δημιουργήσω μια νέα στήλη που ονομάζεται Πόρος με έναν σύνδεσμο με δυνατότητα κλικ σε κάθε πόρο. Απλώς γράφω λίγο βασικό HTML χρησιμοποιώντας τις στήλες What και TheURL για να διευκολύνουμε τους χρήστες να φτάσουν στους πόρους που εμφανίζονται στον πίνακα.

Στη συνέχεια, επιλέγω τις στήλες που θέλω με τη σειρά που τις θέλω.

νικαρ%

αλλάσσω(

Πόρος = κόλλα :: κόλλα ("{What}")

) %>%

επιλέξτε (Πόρος, Ποιος, Ετικέτες, Τύπος, Σχόλια)

Ξεκινήστε με έναν βασικό αντιδραστήριο πίνακα

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

αντιδρώντα (νικάρ)

Και αυτός ο πίνακας είναι βασικός. Δεν υπάρχει ακόμα πλαίσιο αναζήτησης και η στήλη Πόροι δείχνει το πραγματικός κώδικας HTML αντί να εμφανίζεται ως HTML

Sharon Machlis,

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

αντιδραστικό (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Για να πω ότι είναι αντιδραστικό να εμφανίσει τη στήλη Πόροι ως HTML, χρησιμοποιώ το όρισμα στηλών και μια λίστα όπου το colDef ορίζει τα χαρακτηριστικά μιας ή περισσότερων στηλών. Παρακάτω, ρυθμίζω html = true για τη στήλη "Πόροι", έτσι ώστε να εμφανίζεται ως HTML, και κάνω και αυτή τη στήλη να αλλάξει μέγεθος.

αντιδραστικό (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

στήλες = λίστα (

Πόρος = colDef (html = TRUE, resizable = TRUE)

)

)

Για να πούμε ότι δεν μπορεί να εμφανιστεί η στήλη Σχόλια στον κύριο πίνακα, έχω ορίσει colDef (εμφάνιση = FALSE).

αντιδραστικό (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

στήλες = λίστα (

Πόρος = colDef (html = TRUE, resizable = TRUE),

Σχόλια = colDef (εμφάνιση = FALSE)

)

)

Μέχρι εδώ καλά.

Sharon Machlis,

Προσθέστε αντιδραστικό κώδικα για επεκτάσιμες σειρές

Το επόμενο βήμα είναι να προσθέσετε τις επεκτάσιμες σειρές και αυτό είναι λίγο πιο περίπλοκο:

# Απαιτείται λειτουργία σύμφωνα με τον Greg Lin, δημιουργό αντιδρώντος

html <- συνάρτηση (x, inline = FALSE) {

κοντέινερ <- if (inline) htmltools :: span else htmltools :: div

κοντέινερ (κίνδυνοςSetInnerHTML = list ("__ html" = x))

}

αντιδραστικό (nicar, searchable = TRUE, showSortable = TRUE,

στήλες = λίστα (

Πόρος = colDef (html = TRUE, resizable = TRUE),

Σχόλια = colDef (εμφάνιση = FALSE)

),

# εάν υπάρχει σχόλιο, κάντε επεκτάσιμη τη σειρά

λεπτομέρειες = συνάρτηση (ευρετήριο) {

if (nicar $ Comments [index]! = "") {

htmltools :: tagList (

html (nicar $ Σχόλια [index])

)

}

}

)

Δεν έγραψα αυτό το μέρος μόνοι μου. Ο αντιδραστικός δημιουργός Greg Lin το έγραψε. Ειλικρινά, δεν καταλαβαίνω τι κάνει κάθε γραμμή. Αλλά λειτουργεί!

Sharon Machlis

Θυμάμαι αυτόν τον κωδικό την επόμενη φορά που θέλω να φτιάξω έναν πίνακα με επεκτάσιμες σειρές; Όχι σίγουρα όχι. Αλλά αν κάνω ένα Απόσπασμα κώδικα RStudioΔεν το κάνω έχω να το θυμάμαι. Θα είναι πάντα μερικά μόνο πλήκτρα μακριά.

Εάν δεν γνωρίζετε καθόλου τα αποσπάσματα κώδικα RStudio, ρίξτε μια ματιά στο επεισόδιο Do More With R στα αποσπάσματα κώδικα για έναν πλήρη εξηγητή. Αλλά εδώ είναι τα βασικά.

Δημιουργήστε ένα απόσπασμα κώδικα RStudio

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

Sharon Machlis,

Τότε πρέπει απλώς να αλλάξω κάθε όνομα μεταβλητής σε γενικό μεταβλητή αποσπάσματος: 1 για το πλαίσιο δεδομένων, 2 για τη στήλη που θέλω να εμφανίζεται ως HTML και 3 για τη στήλη με δυνατότητα επέκτασης. Σημειώστε τη σύνταξη μεταβλητής: $ {number: variable_name}. Αυτές οι μεταβλητές θα μου κάνουν εύκολο να συμπληρώσω πραγματικά ονόματα μεταβλητών στο RStudio.

απόσπασμα my_expandable_row

html <- συνάρτηση (x, inline = FALSE) {

κοντέινερ <- if (inline) htmltools :: span else htmltools :: div

κοντέινερ (κίνδυνοςSetInnerHTML = list ("__ html" = x))

}

αντιδρώντας ($ {1: mydf}, με δυνατότητα αναζήτησης = TRUE, showSortable = TRUE,

στήλες = λίστα (

$ {2: html_column} = colDef (html = TRUE, resizable = TRUE),

$ {3: expand_col} = colDef (εμφάνιση = FALSE)

),

λεπτομέρειες = συνάρτηση (ευρετήριο) {

if ($ {1: mydf} [['$ {3: expand_col}']] [index]! = "") {

htmltools :: tagList (

html ($ {1: mydf} [['$ {3: expand_col}']] [ευρετήριο])

)

}

}

)

Μπορείτε να αντιγράψετε και να επικολλήσετε τον παραπάνω κώδικα αποσπάσματος στο δικό σας αρχείο αποσπασμάτων RStudio χρησιμοποιώντας

usethis :: edit_rstudio_snippets ()

για να ανοίξετε το αρχείο αποσπασμάτων στο RStudio. Βεβαιωθείτε ότι τα αποσπάσματα κώδικα αποσπάσματος είναι απλά εισαγωγικά και ότι κάθε γραμμή είναι εσοχή με μια καρτέλα (όχι μόνο κενά · μια αρχική καρτέλα για κάθε γραμμή κώδικα είναι υποχρεωτική)

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

Για περισσότερες συμβουλές R, μεταβείτε στη σελίδα Do More With R.