כיצד ליצור טבלאות ב- R עם שורות הניתנות להרחבה

טבלאות אינטראקטיביות עם חיפוש ומיון יכולות להיות דרך נחמדה לחקור נתונים. ולפעמים, כדאי לשתף את הנתונים האלה עם אנשים אחרים - כולל נתונים לטקסט בלבד כמו רשימה של מדריכי וידאו לעשות יותר עם R.

אך כאשר הנתונים הללו כוללים עמודה עם ערכים ארוכים למדי, ייתכן שהעמודה לא תתאים היטב לטבלה ברוחב המסך. זה יכול להיות מסובך במיוחד כשלא כל שורה כוללת את העמודה הרחבה מאוד. לדוגמה, תוצאות טבלת שאלונים כאשר שדה אחד הוא "האם יש לך הערות נוספות?" לא כולם עשויים.

זה המקום שבו שולחן עם שורות הניתנות להרחבה יכול להיות שימושי. בכנס עיתונאות הנתונים של NICAR בתחילת השנה פרסמתי טופס כדי שנואמים (ומשתתפים אחרים) יוכלו להגיש קישורים למצגות מושבים. יש אנשים שהוסיפו הערות נוספות; אחרים לא. הצגת העמודה הזו כברירת מחדל תבזבז הרבה נדל"ן מסך.

במקום זאת, שדה התגובה הזה מוצג בטבלה האינטראקטיבית שלי של משאבי NICAR רק אם משתמש לוחץ על סמל שורת ההרחבה. לא ניתן להרחיב כל שורה באמצעות סמל שניתן ללחוץ עליו משמאל לשם הנושא מכיוון שלא בכל שורה יש נתונים בשדה זה, כפי שניתן (בתקווה) לראות בצילום המסך למטה.

שרון מכליס,

בואו נראה איך מכינים שולחן כזה. 

אם תרצה לעקוב, התקן וטען את החבילה הניתנת לתגובה. עבור הדגמה זו תצטרך להתקין את חבילות ה- Rio, הדבק, htmltools ו- dplyr.

תוכלו להוריד את הנתונים שאשתמש בהם בהדגמה זו מהקישור למטה. מדובר בערכת נתונים קטנה (15 שורות) אודות מושבי R ו- Python בכנס NICAR השנה.

הורד עשה יותר עם ערכת נתוני הדגמה R לטבלאות עם שורות הניתנות להרחבה 15 שורות מידע על הפעלות R ופיתון בכנס עיתונאות הנתונים NICAR 2020 שרון מכליס

טען בתגובה ו- dplyr ב- R.

בקוד שלמטה, אני טוען מגיב ו- dplyr ואז מייבא את הנתונים שלי באמצעות rio::import()

ספרייה (בתגובה)

ספרייה (dplyr)

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

בנתונים יש עמודות עבור שם המשאב (What), הכותב (Who), TheURL, תגיות, סוג ותגובות.

לאחר מכן, אני רוצה ליצור עמודה חדשה בשם Resource עם קישור ללחיצה לכל משאב. אני פשוט כותב מעט HTML בסיסי באמצעות העמודות What ו- TheURL כדי להקל על המשתמשים להגיע למשאבים המוצגים בטבלה.

ואז אני בוחר את העמודות שאני רוצה לפי הסדר שאני רוצה.

% nicar

לְהִשְׁתַנוֹת(

Resource = דבק :: דבק ("{What}")

)%>%

בחר (משאב, מי, תגים, סוג, הערות)

התחל בטבלה בסיסית בתגובה 

לבסוף, אני יוצר טבלה בסיסית ומגיבה כברירת מחדל.

מגיב (nicar)

והטבלה הזו בסיסית. עדיין אין תיבת חיפוש והעמודה 'משאבים' מציגה את קוד ה- HTML בפועל במקום להציג אותו כ- HTML

שרון מכליס,

בקבוצת הקוד הבאה, אני מוסיף תיבת חיפוש לטבלה וסמלי חץ קטנים המראים כי העמודות ניתנות למיון.

ניתן להגיב (nicar, ניתן לחיפוש = TRUE, showSortable = TRUE, showSortIcon = TRUE)

כדי לומר להגיב להציג את העמודה Resource כ- HTML, אני משתמש בארגומנט העמודות וברשימה שבה colDef מגדיר את התכונות של עמודה אחת או יותר. להלן, אני מגדיר html = trueאת העמודה Resource כך שהיא תוצג כ- HTML, ואני גם מגדילה את העמודה הזו.

מגיב (nicar, ניתן לחיפוש = TRUE, showSortable = TRUE, showSortIcon = TRUE,

עמודות = רשימה (

Resource = colDef (html = TRUE, resizable = TRUE)

)

)

כדי להגיד להגיב שלא להציג את העמודה תגובות בטבלה הראשית, הגדרתי colDef(show = FALSE).

מגיב (nicar, ניתן לחיפוש = TRUE, showSortable = TRUE, showSortIcon = TRUE,

עמודות = רשימה (

Resource = colDef (html = TRUE, resizable = TRUE),

הערות = colDef (show = FALSE)

)

)

בינתיים הכל טוב.

שרון מכליס,

הוסף קוד להגיב לשורות הניתנות להרחבה

השלב הבא הוא הוספת השורות הניתנות להרחבה, וזה קצת יותר מורכב:

# פונקציה דרושה על פי גרג לין, יוצר התגובה

html <- פונקציה (x, inline = FALSE) {

מיכל <- אם (מוטבע) htmltools :: span אחר htmltools :: div

מיכל (dangerouslySetInnerHTML = רשימה ("__ html" = x))

}

מגיב (nicar, ניתן לחיפוש = TRUE, showSortable = TRUE,

עמודות = רשימה (

Resource = colDef (html = TRUE, resizable = TRUE),

הערות = colDef (show = FALSE)

),

# אם קיימת תגובה, הפוך את השורה להרחבה

פרטים = פונקציה (אינדקס) {

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

htmltools :: tagList (

html (הערות nicar $ [אינדקס])

)

}

}

)

את החלק הזה לא כתבתי בעצמי; היוצר הנגיב גרג לין כתב את זה. בכנות, אני לא מבין מה כל שורה עושה. אבל זה עובד! 

שרון מכליס

האם אזכור את הקוד הזה בפעם הבאה שארצה להכין טבלה עם שורות הניתנות להרחבה? לא בהחלט לא. אבל אם אני מכין קטע קוד RStudio , אני לא צריך לזכור אותו. זה תמיד יהיה רק ​​כמה הקשות.

אם אינך מכיר כלל קטעי קוד RStudio, עיין בפרק Do More With R על קטעי קוד לקבלת הסבר מלא . אבל הנה היסודות.  

הכינו קטע קוד של RStudio

להלן תמונה של קוד הטבלה שלי המדגישה את המשתנים עבור מסגרות הנתונים ושמות העמודות שלי, וכן משנה את הגדרת העמודה מסימון דולר לסימון סוגריים (שעובד הרבה יותר טוב בתוספים). כמו כן - חשוב מאוד - הוספתי כותרת של קטע וכיספתי כל שורת קוד עם כרטיסיית התחלה. זה חובה!

שרון מכליס,

אז אני פשוט צריך לשנות כל שם משתנה גנרית משתנה קטע : 1 עבור מסגרת הנתונים, 2 עבור העמודה אני רוצה להציג כ- HTML, ו- 3 עבור העמודה בשורה להרחבה. הערת התחביר משתנה: ${number:variable_name}. משתנים אלה יקלו עלי למלא שמות משתנים בפועל בחזרה ב- RStudio. 

קטע my_expandable_row

html <- פונקציה (x, inline = FALSE) {

מיכל <- אם (מוטבע) htmltools :: span אחר htmltools :: div

מיכל (dangerouslySetInnerHTML = רשימה ("__ html" = x))

}

מגיב ($ {1: mydf}, ניתן לחיפוש = TRUE, showSortable = TRUE,

עמודות = רשימה (

$ {2: html_column} = colDef (html = TRUE, שינוי גודל = TRUE),

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

),

פרטים = פונקציה (אינדקס) {

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

htmltools :: tagList (

html ($ {1: mydf} [['$ {3: expand_col}']] [אינדקס])

)

}

}

)

אתה יכול להעתיק ולהדביק את קוד הטקסט לעיל בקובץ קטעי RStudio שלך באמצעות

usethis :: edit_rstudio_snippets ()

כדי לפתוח את קובץ ה- Snippets ב- RStudio. וודא שהמרכאות של קוד הטקסט הן ציטוטים פשוטים ושכל שורה מוטבעת בכרטיסייה (לא רק רווחים; כרטיסיית התחלה לכל שורת קוד היא חובה).

כעת אם תקליד את שם קטע הקוד בקובץ סקריפט של מקור RStudio, עליו להתרחב כדי לתת לך את הקוד. לאחר מכן תוכל להקליד את שם המשתנה הראשון, ללחוץ על הכרטיסייה, להקליד את שם המשתנה השני שלך וכן הלאה. בדוק את הסרטון המוטמע במאמר זה כדי לראות כיצד זה עובד. ותיהנו משולחנות אינטראקטיביים משלכם עם שורות הניתנות להרחבה!

לקבלת טיפים נוספים בנושא R, עבור לדף עשה עוד עם R.