۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

هرگز دوباره به دنبال tidyr’s pivot_wider یا pivot_longer نباشید!

Tidyr را دوست دارید اما هرگز نمی توانید دقیقاً به یاد بیاورید که pivot_wider و pivot_longer دقیقا چگونه کار می کنند؟ با تکه‌های کد RStudio، می‌توانید یک قطعه یک بار بنویسید و همیشه یک الگوی کد پرکننده را در دست داشته باشید.

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 چگونه کار می کند، می توانید این ویدیوی آموزشی را تماشا کنید:

توسعه‌دهندگان Go در حال جذب محصولات عمومی هستند - نظرسنجی

می‌توانید کد قطعه‌ها را با دستور 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

برای یک نسخه قابل خواندن برای انسان، می‌خواهم درآمد و اجاره هر کدام ستون‌های خاص خود را داشته باشند: درآمد، حاشیه خطای درآمد، اجاره، و حاشیه خطای اجاره.

9 سند فوق العاده ای که هر توسعه دهنده ای باید بخواند

کد برای آن:

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 بروید.