Tidyr را دوست دارید اما هرگز نمی توانید دقیقاً به یاد بیاورید که pivot_wider و pivot_longer دقیقا چگونه کار می کنند؟ با تکههای کد RStudio، میتوانید یک قطعه یک بار بنویسید و همیشه یک الگوی کد پرکننده را در دست داشته باشید.
بسیاری از کاربران tidyverse به بسته tidyr R برای تغییر شکل داده ها. اما من افرادی را دیده ام که می گویند نمی توانند دقیقاً به یاد بیاورند که عملکردهای pivot_wider()
و pivot_longer()
چگونه کار می کند. خوشبختانه، یک راه حل آسان وجود دارد: قطعه کد RStudio. یک قطعه یک بار بنویسید، و آنچه اساساً یک فرم پرکننده است، همیشه در دسترس شما خواهد بود.
از پهن به بلند
برای رفتن از پهن به طولانی با tidyr، از تابع pivot_longer()
استفاده کنید. دستور زیر را دارد:
pivot_longer(mydata,
cols, # columns that should pivot from wide to long (unquoted)
names_to, # name of the new category column as a quoted string
values_to # name of the new value column as a quoted string
)
برای یک مثال ساده، بیایید به مجموعه داده معروف mtcars که فرمت گسترده ای دارد نگاه کنیم. این به هیچ وجه دسته ستونی ندارد – مدلها نام ردیف هستند اما در متغیر خودشان نیستند – بنابراین من از تابع مفید rownames_to_column()
بسته تیبل برای اضافه کردن یک ستون مدل از نام ردیفها استفاده کردم:
library(tibble)
library(tidyr)
mtcars <- tibble::rownames_to_column(mtcars, "Model")
head(mtcars) Model mpg cyl disp hp drat wt qsec vs am gear carb ۱ Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ۲ Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 ۳ Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 ۴ Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ۵ Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 ۶ Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
برای تبدیل mtcars به قالب “مرتب” یا طولانی، همه ستونهایی که از mpg شروع میشوند تا آخرین (carb) باید به دو ستون جدید تبدیل شوند – یکی برای دسته و دیگری برای مقدار:
mtcars_long <- pivot_longer(mtcars,
cols = mpg:carb,
names_to = "Category",
values_to = "Value"
)
در زیر کدی برای قطعه کد RStudio قابل استفاده مجدد وجود دارد که هر زمان که شما آن را فراخوانی میکنید، توضیحدهنده کد پرکنندهای برای pivot_longer()
ایجاد میکند. این کد R نیست. این قطعه کد برای تولید کد R:
است
snippet plonger
pivot_longer(${1:mydf},
cols = ${2:columns to pivot long},
names_to = "${3:desired name for category column}",
values_to = "${4:desired name for value column}"
)
همه موارد محصور شده با ${}
متغیرهای قطعه هستند. اگر نمی دانید قطعه کد RStudio چگونه کار می کند، می توانید این ویدیوی آموزشی را تماشا کنید:
میتوانید کد قطعهها را با دستور R زیر به فایل قطعه کد RStudio R خود اضافه کنید:
usethis::edit_rstudio_snippets()
این کار فایل اسنیپت ها را در RStudio باز می کند. سپس می توانید کد را در آن فایل کپی و جایگذاری کنید – یا تایپ کنید. توجه داشته باشید که هر خط زیر اولین خط داخل قطعه و نام قطعه (plonger) باید با یک برگه شروع شود.
شروع به تایپ نام یک قطعه برای انتخاب و استفاده از آن کنید.
برای استفاده از قطعه، شروع به تایپ کردن کنید و نام قطعه به عنوان انتخابی برای انتخاب و استفاده ظاهر میشود. اگر میخواهید قطعه pivot_longer()
را در عمل ببینید، ویدیوی تعبیهشده در بالای این مقاله را تماشا کنید.
پاداش اضافه شده: این قطعه قبلاً دارای علامت نقل قول در جایی است که مورد نیاز است، بنابراین لازم نیست آنها را اضافه کنید.
از طولانی به عریض
برای تغییر شکل، از pivot_wider()
استفاده کنید:
pivot_wider(mydata,
id_cols, # optional vector of columns you do not want affected
names_from, # category column(s) to pivot from long to wide
values_from # value columns(s) that hold data for each category column
names_sep # optional string separator for category-value columns
)
برای این نسخه نمایشی از چارچوب داده us_rent_income استفاده میکنم که دارای دادههای ایالت ایالات متحده برای میانگین درآمد سالانه و متوسط اجاره ماهانه، به علاوه حاشیههای خطا برای هر کدام است.
GEOID NAME variable estimate moe <chr> <chr> <chr> <dbl> <dbl> ۱ ۰۱ Alabama income 24476 136 ۲ ۰۱ Alabama rent 747 3 ۳ ۰۲ Alaska income 32940 508 ۴ ۰۲ Alaska rent 1200 13 ۵ ۰۴ Arizona income 27517 148 ۶ ۰۴ Arizona rent 972 4
برای یک نسخه قابل خواندن برای انسان، میخواهم درآمد و اجاره هر کدام ستونهای خاص خود را داشته باشند: درآمد، حاشیه خطای درآمد، اجاره، و حاشیه خطای اجاره.
کد برای آن:
rent_income_wide <- pivot_wider(us_rent_income,
# id_cols = optional vector of unaffected columns,
names_from = c(variable),
values_from = c(estimate, moe),
names_sep = "_"
)
قطعه کد RStudio در زیر کدهای پرکننده و توضیحات قابل استفاده مجدد را برای هر آرگومان pivot_wider()
ایجاد میکند.
snippet pwider
pivot_wider(${1:mydf},
# id_cols = ${2:optional vector of unaffected columns},
names_from = c(${3:category column(s) to pivot wide}),
values_from = c(${4:value column(s) that hold data for each category column}),
names_sep = "_"
)
می توانید یک فایل متنی را با هر دو قطعه محوری در زیر دانلود کنید. کلیک راست کرده و لینک را به عنوان فایل در سیستم خود ذخیره کنید. از فایل نمایش داده شده در مرورگر کپی و جایگذاری نکنید.
برای نکات R بیشتر، به صفحه InfoWorld Do More With R بروید.
پست های مرتبط
هرگز دوباره به دنبال tidyr’s pivot_wider یا pivot_longer نباشید!
هرگز دوباره به دنبال tidyr’s pivot_wider یا pivot_longer نباشید!
هرگز دوباره به دنبال tidyr’s pivot_wider یا pivot_longer نباشید!