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

رتبه: 0 ار 0 رای sssss
reshape
نویسنده: میلاد حیدری زمان مطالعه 1 دقیقه
Banner Image

تغییر شکل داده ها در 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 framen”)

# 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 framen”)

# 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 framen”)

# 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

profile name
میلاد حیدری

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

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

1 2 3 4 5

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

    هنوز نظری برای این بخش ثبت نشده است
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید