ماتریس، یک ساختار دو بعدی برای داده است. تمام عناصر یک ماتریس باید از یک نوع باشند.(numeric, logical, character, comple). درست همانند بردارها، اگر عناصری که به یک ماتریس میدهید چند نوع باشند R در ماتریس نهایی همهی آنها را به یک نوع تبدیل خواهد کرد. (به این عمل اگر اشنباه نکنم Coercing میگویند.) چندین راه برای به وجود آوردن یک ماتریس در R وجود دارد. به عنوان مثال میتوانیم دو یا چند بردار را با دستورهای cbind و rbind به صورت ستونی یا ردیفی به هم بچسبانیم:
> r1 <- c(1,2,3) > r2 <- c(4,5,6) > r3 <- c(7,8,9) > m <- cbind(r1,r2,r3) > m r1 r2 r3 [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > m <- rbind(r1,r2,r3) > m [,1] [,2] [,3] r1 1 2 3 r2 4 5 6 r3 7 8 9
دستور اصلی که برای به وجود آوردن ماتریس در R وجود دارد دستور matrix است.
> m <- matrix(1:12,nrow = 3,ncol = 4) > m [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > m <- matrix(1:12,nrow = 3,byrow = TRUE) > m [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 > class(m) [1] "matrix" > typeof(m) [1] "integer" > str(m) int [1:3, 1:4] 1 5 9 2 6 10 3 7 11 4 ... > dim(m) [1] 3 4
این دستور، عناصر مورد نظر و تعداد سطر و ستون و ماتریسی از آن به وجود میآورد. در کد بالا، میخواستیم ماتریسی سه سطری و چهار ستونی شامل اعداد یک تا دوازده به وجود بیاوریم. همانطور که میبینید این دستور دادهها را به ترتیب سیتونی در R وارد کرده است. این ترتیب، ترتیب پیشفرض R است. در دستور بعدی nrow = TRUE را اضافه کردیم تا ترتیب ستونی به ترتیب ردیفی تبدیل شود. دستور str از دستورهای بسیار کاربردی R است. این دستور به شما نشان میدهد که داخل یک شئ چه خبر است. دستور class هم نوع شئ را نشان میدهد که د این مورد یک ماتریس است.
data frame
data frame مجموع چند بردار با طولهای مساوی است. data frame هم ساختاری دو بعدی دارد اما فرق آن با ماتریس این است که عناصر ستونهای آن میتوانند از انواع مختلف باشند. با دستور as.data.frame میتوانید یک ماتریس را به یک data.frame تبدیل کنید:
> m <- as.data.frame(m) > class(m) [1] "data.frame" > m V1 V2 V3 V4 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12 > str(m) 'data.frame': 3 obs. of 4 variables: $ V1: int 1 5 9 $ V2: int 2 6 10 $ V3: int 3 7 11 $ V4: int 4 8 12
همانطور که میبینید R به هرکدام از ستونهای ماتریس یک نام اختصاص داده است. data frame ساختار داده بسیار پرکاربردی است. معمولا هر ردیف در آن نشان دهندهی یک مشاهده یا observation و هر ستون آن نشاندهندهی یک مشخصه یا خاصیت برای آن مشاهده است. در واقع دیتا فریم مانند یک صفحه در اکسل یا مینیتب میماند. دستور data.frame در R میتواند این ساختار داده را تولید کند:
> m <- data.frame(rbind(1:4,5:8,9:12)) > m X1 X2 X3 X4 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12
میتوان با دستور های cbind و rbind به دیتا فریم ردیف یا ستون اضافه کرد. در قالب مثالی این موضوع را بررسی میکنیم. فرض کنید کلاسی ۵ دانشآموز با نام های a تا e دارد و این دانشآموزان نمرات زیر را در میانترم از ۸، پایانترم از ۱۰ و پروژه از ۲ نمره کسب کردهاند. با شرط این که نمرات بالای ده قبولند، میخواهیم ماتریسی به دادهها اضافه کنیم که مشخص کند کدام دانشآموز قبول شده و کدام یک رد شده است. نمرهها را در یک دیتا فریم به نام df ذخیره میکنیم:
> df student midTerm final project 1 a 6 7 1 2 b 3 4 1 3 c 8 9 2 4 d 5 2 3 5 e 4 4 1
یک خط کد برای این که بردار قبولی و ردی را برای اضافه کردن به این data frame آماده کنیم کافی است. دربارهی دستور ifelse که در این خط استفاده شده در آیندهی نزدیک بیشتر خواهیم نوشت. یک بردار به نام result با این دستور به وجود میآوریم و آن را با cbind به df استفاده میکنیم.:
> result <- ifelse(((df$midTerm + df$final + df$project) >= 10), "passed", "failed") > result [1] "passed" "failed" "passed" "passed" "failed" > df <- cbind(df,result) > df student midTerm final project result 1 a 6 7 1 passed 2 b 3 4 1 failed 3 c 8 9 2 passed 4 d 5 2 3 passed 5 e 4 4 1 failed
با عملگر $ میتوان به ستونهای یک دیتافریم دسترسی پیدا کرد و با عناصر داخل آن محاسبه انجام داد. به عنوان مثال عبارت df$final ستون سوم دیتافریم را فراخوانی میکند.