גיליון הרמאות האולטימטיבי של נתוני R

מְהִירוּת. תחביר תמציתי. תאימות לאחור.

אבל במיוחד מהירות.

אלה חלק מהתכונות שהופכות את הנתונים של R לשירותים למרתקים את מעריציה.

וגם אם אתה משתמש tidyverse מאושר (כמוני), data.table יכול להיות תוספת שימושית לערכת הכלים שלך R - במיוחד בעבודה עם ערכות נתונים גדולות, באפליקציה מבריקה או בפונקציית חבילה. 

גיליון הצ'יט האולטימטיבי של R-data.table זה שונה מרבים אחרים משום שהוא אינטראקטיבי. אתה יכול לחפש ביטוי ספציפי כמו הוספת עמודה או לפי סוג של קבוצת משימות כגון תת קבוצה או עיצוב מחדש . בנוסף, מכיוון שגיליון הצ'אט הזה כולל קוד "תרגום" מסודר, אתה יכול גם לחפש פועל dplyr מועדף כגון מוטציה או שורת שורה .

משתמשים רשומים יכולים להוריד גרסה מורחבת של טבלה אינטראקטיבית זו לשימוש במערכות שלהם! ההרשמה היא בחינם. 

חפש משימות וקוד data.table ומסודר

מְשִׁימָה סוּג קוד data.table קוד Tidyverse
קרא בקובץ CSV יְבוּא mydt <- fread ("myfile.csv") myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv")
ייבא את המספר x הראשון של השורות של קובץ CSV יְבוּא mydt_x <- fread ("myfile.csv", nrows = x) myt_x <- read_csv ("myfile.csv", n_max = x)
ייבא רק את השורות מקובץ CSV התואמות לדפוס מסוים יְבוּא mydt_pattern <- fread ("grep 'mypattern' myfile.csv") myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv"))
ייבא קובץ .gz דחוס יְבוּא mydt <- fread ("myfile.gz") myt <- vroom :: vroom ("myfile.gz")
ייבא קובץ דחוס של .zip יְבוּא mydt <- fread (cmd = 'unzip -cq myfile.zip') myt <- read_csv ("myfile.zip")
צור טבלת נתונים ממסגרת הנתונים הקיימת (טיבל עבור טוויסבר) יְבוּא mydt <- as.data.table (mydf) #OR

setDT (mydf)

myt <- as_tibble (mydf)
שנה את data.table במקום מבלי ליצור עותק לְהִסְתַכסֵך כל פונקציה שמתחילה עם סט כגון setkey (mydt, mycol) או באמצעות המפעיל: = בסוגריים לא ישים
סדר שורות על סמך ערכי עמודות מרובים לְהִסְתַכסֵך mydt2 <- mydt [order (colA, -colB)] #OR

סידור (mydt, colA, -colB)

myt <- לסדר (myt, colA, -colB)
שנה שם של עמודות לְהִסְתַכסֵך שמות קבוצה (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) myt <- שנה שם (myt, NewColA = colA, NewColB = colB)
סידור מחדש של עמודות: העבר כמה עמודות למצב הקדמי (הכי שמאל) לְהִסְתַכסֵך setcolorder (mydt, c ("colB", "colC")) # colB עכשיו במצב 1 ו- colC במצב 2 myt <- העתק מחדש (myt, colB, colC)
סנן שורות עבור מספר שורה n קבוצת משנה mydt2 <- mydt [n] myt2 <- פרוסה (myt, n)
סנן לשורה האחרונה קבוצת משנה mydt2 <- mydt [.N] myt2 <- פרוסה (myt, n ())
סנן שורות לפי תנאי קבוצת משנה # במקרים מסוימים setkey (mydt, colA, colB) יאיץ ביצועים # לבדיקות לוגיות ב- colA ו- colB; אותו דבר עם עמודות אחרות

mydt2 <- mydt [ביטוי לוגי]

myt2 <- פילטר (myt, ביטוי לוגי)
סנן שורות שבהן colA שווה למחרוזת 1 או מחרוזת 2 קבוצת משנה mydt2 <- mydt [colA% chin% c ("string1", "string2")] myt2 <- פילטר (myt, colA% ב-% c ("string1", "string2"))
סנן שורות שבהן colA תואם ביטוי רגיל קבוצת משנה mydt2 <- mydt [colA% כמו% "mypattern"] myt2 <- פילטר (myt, stringr :: str_detect (colA, "mypattern"))
סנן שורות שבהן ערכי colA הם בין 2 מספרים קבוצת משנה mydt2 <- mydt [colA% בין% c (n1, n2)] myt2 <- פילטר (myt, בין (colA, n1, n2))
סנן לשורות n הראשונות לפי קבוצה קבוצת משנה mydt2 <- mydt [, .SD [1: n], לפי = groupcol] myt2% group_by (groupcol)%>% slice (1: n)
סנן שורות לערך מרבי לפי קבוצה קבוצת משנה mydt2 <- mydt [, .SD [which.max (valcol)], לפי = groupcol] myt2% group_by (groupcol)%>% filter (valcol == max (valcol))
בחר עמודה והחזיר תוצאות כווקטור קבוצת משנה myvec <- mydt [, colname] myvec <- למשוך (myt, colname)
בחר עמודות מרובות כדי ליצור נתונים חדשים. טבלה (מסגרת נתונים או שגיאה עבור טדיברס) קבוצת משנה mydt2 <- mydt [, list (colA, colB)] #OR

mydt2 <- mydt [,. (colA, colB)] #OR

mydt2 <- mydt [, c ("colA", "colB")]

myt2 <- בחר (myt, colA, colB)
בחר עמודות מרובות באמצעות משתנה המכיל את שמות העמודות קבוצת משנה my_col_names <- c ("colA", "colB")

mydt2 <- mydt [, .. my_col_names] #OR

mydt2 <- mydt [, my_col_names, with = FALSE]

my_col_names <- c ("colA", "colB")

myt2 <- בחר (myt, all_of (my_col_names))

בחר עמודות מרובות ושנה שם של חלקן קבוצת משנה mydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)] myt2 <- בחר (myt, newname1 = col1, newname2 = col2, col3)
אל תכלול מספר עמודות קבוצת משנה mydt2 <- mydt [, -c ("colA", "colB")] #OR

mydt2 <- mydt [,! c ("colA", "colB")] #OR

my_col_names <- c ("colA", "colB")

mydt2 <- mydt [,! .. my_col_names]

myt2 <- בחר (myt, -c (colA, colB)) #OR

my_col_names <- c ("colA", "colB")

myt2 <- בחר (myt, - {{my_col_names}})

הסר שורות כפולות על סמך ערכים במספר עמודות קבוצת משנה mydt2 <- ייחודי (mydt, by = c ("colA", "colB")) myt2 <- מובחן (myt, colA, colB, .keep_all = TRUE)
ספירת שורות ייחודיות על בסיס עמודות מרובות לְסַכֵּם uniqueN (mydt, by = c ("colA", "colB")) nrow (מובחן (myt, colA, colB))
הפעל חישובי סיכום על נתונים לְסַכֵּם mydt2 <- mydt [, myfun (colA ...)] myt2% סיכום (ColName = myfun (colA ...))
הפעל חישובי סיכום על נתונים לפי קבוצה אחת לְסַכֵּם mydt2 <- mydt [, myfun (colA ...), מאת = groupcol] myt2%

group_by (groupcol)%>%

לְסַכֵּם(

NewCol = myfun (colA ...)

)

הפעל חישובי סיכום על נתונים לפי קבוצה אחת ושמו עמודה חדשה לְסַכֵּם mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), לפי = groupcol] myt2%

group_by (groupcol)%>%

לְסַכֵּם(

NewCol = myfun (colA ...)

)

הפעל חישובי סיכום על נתונים לפי קבוצות מרובות לְסַכֵּם mydt2 <- mydt [, myfun (colA ...), לפי =. (groupcol1, groupcol2)] myt2%

group_by (groupcol1, groupcol2)%>%

לְסַכֵּם(

NewCol = myfun (colA ...)

)

הפעל חישוב סיכום על נתונים מסוננים על ידי מספר קבוצות לְסַכֵּם mydt2 <- mydt [ביטוי מסנן, myfun (colA), לפי =. (groupcol1, groupcol2)] myt2%

פילטר (ביטוי פילטר)%>%

group_by (groupcol1, groupcol2)%>%

לְסַכֵּם(

NewCol = myfun (colA), .groups = "keep"

)

ספירת מספר השורות לפי קבוצות לְסַכֵּם mydt2 <- mydt [,. N, by = groupcol] # לקבוצה אחת # או

mydt2 <- mydt [, .N, by =. (groupcol1, groupcol2)]

myt2 <- ספירה (myt, groupcol) # לקבוצה אחת #OR

myt2 <- ספירה (myt, groupcol1, groupcol2)

סכם מספר עמודות והחזר תוצאות במספר עמודות לְסַכֵּם mydt2 <- mydt [, lapply (.SD, myfun),

.Sdcols = c ("colA", "colB")]

myt2%

לְסַכֵּם(

על פני (c (colA, colB), myfun)

)

סכם מספר עמודות לפי קבוצה והחזיר תוצאות במספר עמודות לְסַכֵּם mydt2 <- mydt [, lapply (.SD, myfun),

.Sdcols = c ("colA", "colB"), לפי = groupcol]

myt2%

group_by (groupcol)%>%

לסכם (על פני (c (colA, colB), myfun))

הוסף עמודה לחשב mydt [, MyNewCol: = myfun (colA)] myt%

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

MyNewCol = myfun (colA)

)

הוסף מספר עמודות בו זמנית לחשב # השתמש בכל פונקציה או ביטוי

mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] #OR

mydt [, c ("NewCol1", "newCol2"): = רשימה (myfun (colA), colB + colC)]

myt%

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

MyNewCol1 = myfun (colA),

MyNewCol2 = colB + colC

)

הוסף עמודה באמצעות ערכים נוכחיים וקודמים מעמודה אחרת, כגון מציאת ההבדל בין ערך בתאריך לעומת התאריך הקודם לחשב mydt [, Diff: = colA - shift (colA)] myt <- מוטציה (myt, Diff = colA - lag (colA))
הוסף עמודה המתייחסת לערך הקודם של עמודה על ידי קבוצה לחשב mydt2 <- mydt [, Diff: = colA - shift (colA), לפי = groupcol] myt2% group_by (groupcol)%>% mutate (Diff = colA - lag (colA))
הוסף עמודה עם מספרי זיהוי שורה לפי קבוצה לחשב mydt [, myid: = 1: .N, by = groupcol] myt% group_by (groupcol)%>% mutate (myid = row_number ())
הוסף עמודה על בסיס מספר תנאים מבלי להשתמש במשפטים מרובים אם אחרת (כמו ה- CASE של SQL) לחשב # זקוק ל- data.table גרסה 1.13 ואילך

# אני אוהב כל תנאי בשורה חדשה אבל זה לא נדרש

mydt2 <- mydt [, NewCol: = fcase (

תנאי 1, "ערך 1",

תנאי 2, "ערך 2",

תנאי 3, "ערך 3",

default = "אחר" ערך # לכל השאר

]]

myt2%

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

NewCol = case_when (

תנאי 1 ~ "ערך 1",

תנאי 2 ~ "ערך 2",

תנאי 3 ~ "ערך 3",

TRUE ~ "אחר"

)

)

הוסף עמודה באמצעות הפעלה לפי שורה לחשב mydt [, newcol: = myfun (colB, colC, colD), לפי = 1: nrow (mydt)]

# או אם ל- colA יש את כל הערכים הייחודיים

mydt [, newcol: = myfun (colB, colC, colD), by = colA]

myt%

בשורה ()%>%

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

newcol = myfun (colB, colC, colD)

)

# או

myt%

בשורה ()%>%

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

# השתמש ב- dplyr בחר תחביר:

newcol = myfun (c_across (colB: colD))

)

הצטרף לשני מערכי נתונים ביותר מעמודה אחת; שמור הכל ב- set1 אך רק בהתאמות ב- set2 לְהִצְטַרֵף mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] #OR

mydt <- מיזוג (dt1, dt2, by.x = "dt1col", by.y = "dt2col", all.x = TRUE) #OR

setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1]

myt <- left_join (df1, df2, by = c ("df1col" = "df2col"))
הצטרף לשתי מערכי נתונים על ידי יותר מעמודה אחת - שמור הכל ב- set1 אך רק בהתאמות ב- set2 לְהִצְטַרֵף mydt <- מיזוג (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = TRUE, all.y = FALSE ) # או

setkey (dt1, dt1colA, dt1colB)

setkey (dt2, dt2colA, dt2colB)

mydt <- dt2 [dt1]

myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB"))
הצטרף לשתי מערכי נתונים לפי עמודה משותפת אחת; רק לשמור על גפרורים לְהִצְטַרֵף mydt <- מיזוג (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") myt <- inner_join (df1, df2, by = c ("df1col" = "df2col"))
הצטרף לשתי קבוצות נתונים בעמודה משותפת אחת ושמור את כל הנתונים בשתי הערכות, בין אם יש התאמות ובין אם לא לְהִצְטַרֵף mydt <- מיזוג (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", הכל = TRUE) myt <- full_join (df1, df2, by = c ("df1col" = "df2col"))
שלב שתי ערכות נתונים על ידי הוספת שורות מאחת לתחתית זו לְהִצְטַרֵף mydt_joined <- rbindlist (רשימה (mydt, mydt2)) myt_joined <- bind_rows (myt, myt2)
עיצוב נתונים רחב עד ארוך שִׁנוּי צוּרָה mydt_long <- melt (mydt, measure.vars = c ("col1", "col2", "col3"), variable.name = "NewCategoryColName", value.name = "NewValueColName") myt_long <- pivot_longer (myt, cols = starts_with ("col"), names_to = "NewCategoryColName", values_to = "NewValueColName")
עיצוב נתונים ארוכים עד רחבים שִׁנוּי צוּרָה mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName)
שרשר ביטויים מרובים לְהִסְתַכסֵך mydt [expr1] [expr2] myt%

expr1%>%

expr2

ייצא נתונים לקובץ CSV יְצוּא fwrite (mydt, "myfile.csv") write_csv (myt, "myfile.csv")
הוסף שורות לקובץ CSV קיים יְצוּא fwrite (mydt2, "myfile.csv", append = TRUE) vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE)
ייצא נתונים לקובץ CSV דחוס יְצוּא fwrite (mydt, "myfile.csv.gz", compress = "gzip") vroom :: vroom_write (myt, "myfile2.csv.gz")

יש עוד הרבה מה ללמוד על data.table! לקבלת מידע בסיסי על טבלת הנתונים, עיין בסרטון ההיכרות שלי בן חמש הדקות:

לבסוף, באתר data.table יש הרבה יותר מידע וטיפים, כגון שימוש setkey()וטיפים נוספים לאינדקס.