reshape

تغییر شکل مجدد داده ها در زبان برنامه نویسی آر

اساطیر زبان

تغییر شکل داده ها در R در مورد تغییر روشی است که داده ها را در ردیف ها و ستون ها سازماندهی می کند. اغلب، پردازش داده ها در R با اتخاذ ورودی داده ها به عنوان دیتافریم؛ انجام می شود. به سادگی می توان داده ها را از ردیف ها و ستون های یک فریم دیتا استخراج کرد؛ اما ممکن است شرایطی پیش بیاید که فرمت فریم دیتای مورد نیاز ما با آن که در یافت کرده ایم؛ متفاوت باشد. آر توابع زیادی برای تقسیم کردن؛ ادغام و تغییر ردیف ها به ستون ها و برعکس؛ دارد.

اضافه کردن ستون ها و ردیف ها به فریم دیتا

با استفاده از تابع ()cbind می توانیم بردارهای چندتایی را برای ایجاد یک فریم دیتا، باهم به کار ببریم. همچنین می توانیم دو فریم دیتا را با استفاده از تابع ()rbind با هم ادغام کنیم.

# Create vector objects.

city <- c(“Tampa”,”Seattle”,”Hartford”,”Denver”)

state <- c(“FL”,”WA”,”CT”,”CO”)

zipcode <- c(33602,98104,06161,80294)

# Combine above three vectors into one data frame.

addresses <- cbind(city,state,zipcode)

# Print a header.

cat(“# # # # The First data frame\n”)

# Print the data frame.

print(addresses)

# Create another data frame with similar columns

new.address <- data.frame(

city = c(“Lowry”,”Charlotte”),

state = c(“CO”,”FL”),

zipcode = c(“80230″,”33949”),

stringsAsFactors = FALSE

)

# Print a header.

cat(“# # # The Second data frame\n”)

# Print the data frame.

print(new.address)

# Combine rows form both the data frames.

all.addresses <- rbind(addresses,new.address)

# Print a header.

cat(“# # # The combined data frame\n”)

# Print the result.

print(all.addresses)

زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر به دست می آید:

# # # # The First data frame

city state zipcode

[۱,] “Tampa” “FL” “33602”

[۲,] “Seattle” “WA” “98104”

[۳,] “Hartford” “CT” “6161”

[۴,] “Denver” “CO” “80294”

# # # The Second data frame

city state zipcode

۱ Lowry CO 80230

۲ Charlotte FL 33949

# # # The combined data frame

city state zipcode

۱ Tampa FL 33602

۲ Seattle WA 98104

۳ Hartford CT 6161

۴ Denver CO 80294

۵ Lowry CO 80230

۶ Charlotte FL 33949

ادغام فریم دیتاها

می توانیم دو فریم دیتا را با استفاده از تابع ()merge با هم ادغام کنیم. فریم دیتاها باید نام های ستون مشابهی داشته باشند که در آن ادغام باید انجام شوند.

در مثال زیر، فرض می کنیم که مجموعه داده های مربوط به دیابت در زنان ایالت پیما در هندوستان در کتابخانه ای به نام “MASS” در دسترس باشد. ما دو مجموعه داده را بر اساس مقادیر فشار خون (“bp”) و شاخص توده بدن (“bmi”) ادغام می کنیم. در انتخاب این دو ستون برای ادغام؛ اطلاعاتی که مقادیر این دو متغیر در هر دو مجموعه داده مطابقت داشته باشند؛ با هم ترکیب می شوند تا یک فریم داده واحد را تشکیل دهند.

library(MASS)

merged.Pima <- merge(x = Pima.te, y = Pima.tr,

by.x = c(“bp”, “bmi”),

by.y = c(“bp”, “bmi”)

)

print(merged.Pima)

nrow(merged.Pima)

زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر به دست می آید:

bp bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y

۱ ۶۰ ۳۳٫۸ ۱ ۱۱۷ ۲۳ ۰٫۴۶۶ ۲۷ No 2 125 20 0.088

۲ ۶۴ ۲۹٫۷ ۲ ۷۵ ۲۴ ۰٫۳۷۰ ۳۳ No 2 100 23 0.368

۳ ۶۴ ۳۱٫۲ ۵ ۱۸۹ ۳۳ ۰٫۵۸۳ ۲۹ Yes 3 158 13 0.295

۴ ۶۴ ۳۳٫۲ ۴ ۱۱۷ ۲۷ ۰٫۲۳۰ ۲۴ No 1 96 27 0.289

۵ ۶۶ ۳۸٫۱ ۳ ۱۱۵ ۳۹ ۰٫۱۵۰ ۲۸ No 1 114 36 0.289

۶ ۶۸ ۳۸٫۵ ۲ ۱۰۰ ۲۵ ۰٫۳۲۴ ۲۶ No 7 129 49 0.439

۷ ۷۰ ۲۷٫۴ ۱ ۱۱۶ ۲۸ ۰٫۲۰۴ ۲۱ No 0 124 20 0.254

۸ ۷۰ ۳۳٫۱ ۴ ۹۱ ۳۲ ۰٫۴۴۶ ۲۲ No 9 123 44 0.374

۹ ۷۰ ۳۵٫۴ ۹ ۱۲۴ ۳۳ ۰٫۲۸۲ ۳۴ No 6 134 23 0.542

۱۰ ۷۲ ۲۵٫۶ ۱ ۱۵۷ ۲۱ ۰٫۱۲۳ ۲۴ No 4 99 17 0.294

۱۱ ۷۲ ۳۷٫۷ ۵ ۹۵ ۳۳ ۰٫۳۷۰ ۲۷ No 6 103 32 0.324

۱۲ ۷۴ ۲۵٫۹ ۹ ۱۳۴ ۳۳ ۰٫۴۶۰ ۸۱ No 8 126 38 0.162

۱۳ ۷۴ ۲۵٫۹ ۱ ۹۵ ۲۱ ۰٫۶۷۳ ۳۶ No 8 126 38 0.162

۱۴ ۷۸ ۲۷٫۶ ۵ ۸۸ ۳۰ ۰٫۲۵۸ ۳۷ No 6 125 31 0.565

۱۵ ۷۸ ۲۷٫۶ ۱۰ ۱۲۲ ۳۱ ۰٫۵۱۲ ۴۵ No 6 125 31 0.565

۱۶ ۷۸ ۳۹٫۴ ۲ ۱۱۲ ۵۰ ۰٫۱۷۵ ۲۴ No 4 112 40 0.236

۱۷ ۸۸ ۳۴٫۵ ۱ ۱۱۷ ۲۴ ۰٫۴۰۳ ۴۰ Yes 4 127 11 0.598

age.y type.y

۱ ۳۱ No

۲ ۲۱ No

۳ ۲۴ No

۴ ۲۱ No

۵ ۲۱ No

۶ ۴۳ Yes

۷ ۳۶ Yes

۸ ۴۰ No

۹ ۲۹ Yes

۱۰ ۲۸ No

۱۱ ۵۵ No

۱۲ ۳۹ No

۱۳ ۳۹ No

۱۴ ۴۹ Yes

۱۵ ۴۹ Yes

۱۶ ۳۸ No

۱۷ ۲۸ No

[۱] ۱۷

یکی از جالب ترین جنبه های برنامه نویسی R در مورد تغییر شکل داده ها طی چندین مرحله برای رسیدن به شکل مطلوب می باشد. توابع به کار رفته در این امر؛ ()melt و ()cast می باشد.

ما پایگاه داده ای را در نظر می گیریم که در کتابخانه ای که “MASS” نامیده می شود؛ ships را فراخوانی می کند:

library(MASS)

print(ships)

زمانی که کد بالا را اجرا کنیم؛ نتیجه زیر به دست می آید:

type year period service incidents

۱ A 60 60 127 0

۲ A 60 75 63 0

۳ A 65 60 1095 3

۴ A 65 75 1095 4

۵ A 70 60 1512 6

………….

………….

۸ A 75 75 2244 11

۹ B 60 60 44882 39

۱۰ B 60 75 17176 29

۱۱ B 65 60 28609 58

…………

…………

۱۷ C 60 60 1179 1

۱۸ C 60 75 552 1

۱۹ C 65 60 781 0

…………

…………

ذوب کردن داده ها (melt)

اکنون داده ها را برای سازماندهای آنها به اصطلاح ذوب کرده ایم و تمام ستون ها به غیر از نوع و سال را به ردیف های چندتایی تبدیل کرده ایم:

molten.ships <- melt(ships, id = c(“type”,”year”))

print(molten.ships)

زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر به دست می آید:

type year variable value

۱ A 60 period 60

۲ A 60 period 75

۳ A 65 period 60

۴ A 65 period 75

…………

…………

۹ B 60 period 60

۱۰ B 60 period 75

۱۱ B 65 period 60

۱۲ B 65 period 75

۱۳ B 70 period 60

………..

………..

۴۱ A 60 service 127

۴۲ A 60 service 63

۴۳ A 65 service 1095

………..

………..

۷۰ D 70 service 1208

۷۱ D 75 service 0

۷۲ D 75 service 2051

۷۳ E 60 service 45

۷۴ E 60 service 0

۷۵ E 65 service 789

………..

………..

۱۰۱ C 70 incidents 6

۱۰۲ C 70 incidents 2

۱۰۳ C 75 incidents 0

۱۰۴ C 75 incidents 1

۱۰۵ D 60 incidents 0

۱۰۶ D 60 incidents 0

………..

………..

شکل دهی به داده های ذوب شده

ما می توانیم داده های ذوب شده به فرم جدیدی شکل دهی کنیم که در آن هر نوع ship برای هر سال ایجاد می شود. این کار با استفاده از تابع ()cast انجام می شود.

recasted.ship <- cast(molten.ships, type+year~variable,sum)

print(recasted.ship)

زمانی که کد بالا را اجرا کنیم؛ نتیجه زیر به دست می آید:

type year period service incidents

۱ A 60 135 190 0

۲ A 65 135 2190 7

۳ A 70 135 4865 24

۴ A 75 135 2244 11

۵ B 60 135 62058 68

۶ B 65 135 48979 111

۷ B 70 135 20163 56

۸ B 75 135 7117 18

۹ C 60 135 1731 2

۱۰ C 65 135 1457 1

۱۱ C 70 135 2731 8

۱۲ C 75 135 274 1

۱۳ D 60 135 356 0

۱۴ D 65 135 480 0

۱۵ D 70 135 1557 13

۱۶ D 75 135 2051 4

۱۷ E 60 135 45 0

۱۸ E 65 135 1226 14

۱۹ E 70 135 3318 17

۲۰ E 75 135 542 1

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست