Kako stvoriti tablice u R s proširivim redovima

Interaktivne tablice s pretraživanjem i razvrstavanjem mogu biti lijep način istraživanja podataka. A ponekad ćete možda htjeti podijeliti te podatke s drugim ljudima - uključujući podatke samo za tekst, poput popisa video vodiča Učinite više s R.

Ali kad ti podaci uključuju stupac s prilično dugim unosima, taj stupac možda neće dobro stati u tablicu širine vašeg zaslona. To može biti posebno nezgodno kad ne uključuje svaki redak vrlo širok stupac. Na primjer, tablica rezultata upitnika u kojem je jedno polje "Imate li dodatnih komentara?" Ne mogu svi.

Tu vam može dobro doći stol s proširivim redovima. Na konferenciji NICAR-ovog novinarskog novinarstva početkom ove godine objavio sam obrazac kako bi govornici (i ostali sudionici) mogli slati linkove na prezentacije sesija. Neki su ljudi dodali dodatne komentare; drugi nisu. Prikazivanje tog stupca prema zadanim postavkama izgubilo bi puno nekretnina na ekranu.

Umjesto toga, to se polje za komentar prikazuje u mojoj interaktivnoj tablici NICAR resursa samo ako korisnik klikne na ikonu proširivog retka. Ne može se svaki redak proširiti pomoću ikone na koju se može kliknuti s lijeve strane naziva teme, jer nema svaki redak podataka u tom polju, kao što možete (nadamo se) vidjeti na donjoj snimci zaslona.

Sharon Machlis,

Pogledajmo kako napraviti ovakav stol. 

Ako želite nastaviti, instalirajte i učitajte reaktivni paket. Za ovu demonstraciju trebat će vam i instalirani paketi rio, ljepilo, htmltools i dplyr.

Podatke koje ću koristiti u ovoj demonstraciji možete preuzeti s donje veze. To je mali (15 redaka) skup podataka o R i Python sesijama na ovogodišnjoj NICAR konferenciji.

preuzmi Učinite više s R demo skupom podataka za tablice s proširivim redovima 15 redaka informacija o R i Python sesijama na konferenciji NICAR o novinarstvu podataka 2020 Sharon Machlis

Učitajte reaktivni i dplyr u R

U donjem kodu učitavam reaktivni i dplyr, a zatim uvozim svoje podatke pomoću rio::import()

knjižnica (reagira)

knjižnica (dplyr)

nicar <- rio :: import ("nicar.csv")

Podaci imaju stupce za naziv resursa (Što), autora (Tko), TheURL, Oznake, vrstu i komentare.

Dalje, želim stvoriti novi stupac pod nazivom Resurs s klikom na vezu do svakog resursa. Samo pišem mali osnovni HTML koristeći stupce What i TheURL kako bih korisnicima olakšao pristup resursima prikazanim u tablici.

Zatim odabirem stupce koje želim redom kojim ih želim.

nicar%

mutirati(

Resurs = ljepilo :: ljepilo ("{Što}")

)%>%

odaberite (Resurs, Tko, Oznake, Vrsta, Komentari)

Započnite s osnovnom reaktivnom tablicom 

Napokon, kreiram osnovnu, zadanu reaktivnu tablicu.

reaktivan (nicar)

A ova je tablica osnovna. Još nema okvira za pretraživanje, a stupac Resurs prikazuje stvarni HTML kôd umjesto da se prikazuje kao HTML

Sharon Machlis,

U sljedeću grupu kodova u tablicu dodajem okvir za pretraživanje i male ikone strelica koje pokazuju da se stupci mogu sortirati.

reaktivan (nicar, pretraživi = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Da bih rekao reaktivnom da prikaže stupac Resurs kao HTML, koristim argument stupci i popis na kojem colDef postavlja atribute jednog ili više stupaca. U nastavku postavljam html = truestupac Resurs tako da se prikazuje kao HTML, a također omogućujem promjenu veličine tog stupca.

reaktivan (nicar, pretraživi = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stupci = popis (

Resurs = colDef (html = TRUE, promjenjiv = TRUE)

)

)

Da bih rekao reaktivnima da ne prikazuju stupac Komentari u glavnoj tablici, postavio sam colDef(show = FALSE).

reaktivan (nicar, pretraživi = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stupci = popis (

Resurs = colDef (html = TRUE, promjenjiv = TRUE),

Komentari = colDef (show = FALSE)

)

)

Zasada je dobro.

Sharon Machlis,

Dodajte reaktivni kod za proširive retke

Sljedeći je korak dodavanje proširivih redaka, a to je malo složenije:

# Funkcija potrebna prema Gregu Linu, tvorcu reakcije

html <- funkcija (x, inline = FALSE) {

spremnik <- if (inline) htmltools :: span else htmltools :: div

spremnik (opasnoSetInnerHTML = popis ("__ html" = x))

}

reaktivan (nicar, pretraživ = ISTINITO, showSortable = TRUE,

stupci = popis (

Resurs = colDef (html = TRUE, promjenjiv = TRUE),

Komentari = colDef (show = FALSE)

),

# ako postoji komentar, neka redak bude proširiv

detalji = funkcija (indeks) {

if (nicar $ Komentari [indeks]! = "") {

htmltools :: tagList (

html (nicar $ Komentari [indeks])

)

}

}

)

Ovaj dio nisam napisao sam; reaktivni kreator Greg Lin to je napisao. Iskreno, ne razumijem što svaka linija radi. Ali djeluje! 

Sharon Machlis

Hoću li se sjetiti ovog koda sljedeći put kada želim napraviti tablicu s proširivim redovima? Ne. Definitivno ne. Ali ako napravim isječak koda RStudio , ne moram ga se sjećati. Uvijek će biti udaljeno samo nekoliko pritiskanja tipki.

Ako uopće niste upoznati s isječcima koda RStudio, za cjelovito objašnjenje pogledajte epizodu Do more with R na isječcima koda . Ali ovdje su osnove.  

Napravite RStudio isječak koda

Ispod je slika mog koda tablice koja ističe varijable za moj okvir podataka i imena stupaca, kao i promjenu definicije stupca iz oznake dolara u notaciju u zagradama (koja puno bolje djeluje u isječcima). Također - vrlo važno - dodao sam naslov isječka i uvukao svaki redak koda s početnom karticom. To mora!

Sharon Machlis,

Tada jednostavno moram promijeniti svako ime varijable u generičku varijablu isječka : 1 za podatkovni okvir, 2 za stupac koji želim prikazati kao HTML i 3 za stupac s proširivim retkom. Napomena varijablu sintaksu: ${number:variable_name}. Te će mi varijable olakšati ispunjavanje stvarnih imena varijabli natrag u RStudio. 

isječak my_expandable_row

html <- funkcija (x, inline = FALSE) {

spremnik <- if (inline) htmltools :: span else htmltools :: div

spremnik (opasnoSetInnerHTML = popis ("__ html" = x))

}

reaktivan ($ {1: mydf}, pretraživi = ISTINITO, showSortable = TRUE,

stupci = popis (

$ {2: html_column} = colDef (html = ISTINA, promjenjiva veličina = ISTINA),

$ {3: expand_col} = colDef (show = FALSE)

),

detalji = funkcija (indeks) {

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

htmltools :: tagList (

html ($ {1: mydf} [['$ {3: expand_col}']] [indeks])

)

}

}

)

Možete kopirati i zalijepiti gore navedeni isječak koda u vlastitu datoteku RStudio isječaka pomoću

usethis :: edit_rstudio_snippets ()

za otvaranje datoteke isječaka u RStudio. Provjerite jesu li navodnici isječaka kodovi obični citati i da je svaki redak uvučen karticom (ne samo razmacima; početna kartica za svaki redak koda je obavezna).

Sada ako upišete ime isječka u datoteku skripte RStudio source R, trebalo bi se proširiti kako bi vam dao kôd. Zatim možete upisati ime prve varijable, kliknuti karticu, upisati ime druge varijable itd. Pogledajte videozapis ugrađen u ovaj članak da biste vidjeli kako to funkcionira. I uživajte u vlastitim interaktivnim stolovima s proširivim redovima!

Za više R savjeta, idite na stranicu Učini više s R.