0Pricing
R Academy · درس

تبديل المصفوفات وإعادة تشكيلها

استخدم t() وdim() وعمليات reshape على المصفوفات.

تبديل المصفوفات وإعادة تشكيلها درس مجاني في R Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

تبديل المصفوفة باستخدام t()

تبدّل t(m) المصفوفة — إذ تقلب الصفوف والأعمدة بحيث يصبح الصف i عمودًا i في النتيجة. وتتبادل الأبعاد: فالمصفوفة ذات الأبعاد 3x4 تصبح 4x3 بعد التبديل.

m <- matrix(1:6, nrow = 2, ncol = 3)
cat('Original (2x3):
'); print(m)
cat('Transposed (3x2):
'); print(t(m))
cat('Original dim:', dim(m), '-> Transposed dim:', dim(t(m)), '
')

التبديل مع الأبعاد المسماة

عندما تكون للمصفوفة أسماء للصفوف والأعمدة، تبدّل t() الأسماء بشكل صحيح: فتصبح أسماء الصفوف أسماء أعمدة والعكس صحيح. ويحافظ ذلك على تسميات البيانات بعد التبديل.

scores <- matrix(
  c(88,92,75, 79,85,90),
  nrow = 2, byrow = TRUE,
  dimnames = list(c('Alice', 'Bob'), c('Math', 'Sci', 'Eng'))
)
cat('Original (students x subjects):
'); print(scores)
cat('Transposed (subjects x students):
'); print(t(scores))

إعادة التشكيل باستخدام dim(m) <- c(r, c)

يمكنكم إعادة تشكيل المصفوفة بإعادة إسناد سمة dim إليها. ويجب أن يبقى العدد الإجمالي للعناصر كما هو. وتقرأ عملية إعادة التشكيل البيانات وتملأها عمودًا تلو الآخر، تمامًا مثل matrix().

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Original (3x4):
'); print(m)

# Reshape to 4x3
dim(m) <- c(4, 3)
cat('Reshaped to (4x3):
'); print(m)

# Reshape to 6x2
dim(m) <- c(6, 2)
cat('Reshaped to (6x2):
'); print(m)

تحويل المصفوفة إلى متجه باستخدام as.vector()

تحوّل as.vector(m) المصفوفة إلى متجه أحادي البعد، إذ تقرأ القيم عمودًا تلو الآخر. ويؤدي ذلك إلى إزالة جميع سمات الأبعاد من الكائن.

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
'); print(m)

v <- as.vector(m)
cat('As vector (col-by-col):', v, '
')
cat('Is vector:', is.vector(v), '
')
cat('Is matrix:', is.matrix(v), '
')

تحويل المتجه إلى مصفوفة باستخدام as.matrix()

تحوّل as.matrix(v) المتجه إلى مصفوفة ذات عمود واحد. وهذا أبسط تحويل ممكن. ويمكنكم بعد ذلك إعادة تشكيلها باستخدام dim() للحصول على الأبعاد المطلوبة.

v <- c(5, 10, 15, 20, 25, 30)
cat('Vector:', v, '
')

# as.matrix makes a 6x1 matrix
m_single_col <- as.matrix(v)
cat('Single-column matrix:
'); print(m_single_col)
cat('Dimensions:', dim(m_single_col), '
')

rbind() — تكديس الصفوف

تجمع rbind() المصفوفات أو المتجهات من خلال تكديس الصفوف. ويجب أن يكون لمدخلات الدالة العدد نفسه من الأعمدة. وتحتوي المصفوفة الناتجة على مجموع أعداد الصفوف.

first_half <- matrix(1:6, nrow = 2, ncol = 3)
second_half <- matrix(7:12, nrow = 2, ncol = 3)

combined <- rbind(first_half, second_half)
cat('rbind result (4x3):
'); print(combined)
cat('Dimensions:', dim(combined), '
')

cbind() — ضم الأعمدة

تجمع cbind() المصفوفات أو المتجهات من خلال ضم الأعمدة جنبًا إلى جنب. ويجب أن يكون لمدخلات الدالة العدد نفسه من الصفوف. وتحتوي النتيجة على مجموع أعداد الأعمدة.

ids <- matrix(101:104, nrow = 4, ncol = 1)
scores_mat <- matrix(c(88,79,95,72, 92,85,78,90), nrow = 4)

full_data <- cbind(ids, scores_mat)
colnames(full_data) <- c('ID', 'Test1', 'Test2')
cat('cbind result:
'); print(full_data)

rbind() و cbind() مع الصفوف أو الأعمدة المسماة

عند استخدام rbind() أو cbind() مع مصفوفات أو متجهات مسماة، تُحفظ أسماء الأبعاد (وفي حالة المتجهات، تصبح أسماء المتجه أسماء الصفوف أو الأعمدة).

# Add a new student row with rbind
existing <- matrix(c(88,92,75, 79,85,90), nrow = 2, byrow = TRUE,
                   dimnames = list(c('Alice','Bob'), c('Math','Sci','Eng')))
new_student <- c(Math=95, Sci=78, Eng=82)
updated <- rbind(existing, Carol = new_student)
cat('Updated roster:
'); print(updated)

هوية التبديل المزدوج

تعيد عملية تطبيق t() مرتين المصفوفة الأصلية. وهذا اختبار مفيد للتحقق من سلامة النتيجة، كما يوضح أن التبديل هو العملية العكسية لنفسها: t(t(m)) == m.

m <- matrix(c(1,2,3,4,5,6), nrow = 2)
cat('Original:
'); print(m)
cat('t(m):
');    print(t(m))
cat('t(t(m)):
'); print(t(t(m)))
cat('t(t(m)) == m:', all(t(t(m)) == m), '
')

تطبيق عملي: إعادة تشكيل بأسلوب Pivot

من مهام إعادة التشكيل الشائعة التحويل بين التنسيق العريض والتنسيق الطولي. سنحاكي هنا عملية Pivot يدوية من التنسيق العريض إلى الطولي باستخدام عمليات المصفوفات — عبر التبديل والتسطيح وإعادة بناء البنية.

# Wide: 3 students x 4 months scores
wide <- matrix(c(85,88,90,92, 78,80,79,83, 91,94,88,95),
               nrow = 3, byrow = TRUE)
rownames(wide) <- c('Alice', 'Bob', 'Carol')
colnames(wide) <- c('Jan', 'Feb', 'Mar', 'Apr')
cat('Wide format:
'); print(wide)

# Transposed: 4 months x 3 students
long_view <- t(wide)
cat('Transposed (months x students):
'); print(long_view)

ملخص إعادة التشكيل والدمج

أهم أدوات إعادة تشكيل المصفوفات ودمجها:

  • t(m) — التبديل (تبادل الصفوف والأعمدة)
  • dim(m) <- c(r, c) — إعادة التشكيل موضعيًا (مع الحفاظ على العدد الإجمالي للعناصر)
  • as.vector(m) — التسطيح إلى متجه أحادي البعد (بترتيب الأعمدة)
  • as.matrix(v) — تحويل المتجه إلى مصفوفة ذات عمود واحد
  • rbind(...) — تكديس المصفوفات رأسيًا
  • cbind(...) — ضم المصفوفات أفقيًا
# Demo all tools
v <- 1:6
m1 <- as.matrix(v)               # 6x1
dim(m1) <- c(2, 3)               # reshape to 2x3
m2 <- t(m1)                      # 3x2
m3 <- cbind(m2, c(10, 20, 30))   # 3x3
cat('Final matrix:
'); print(m3)

تحقق سريع

ما أبعاد الناتج من t(matrix(1:12, nrow = 3, ncol = 4))؟

مراجعة: تبديل المصفوفات وإعادة تشكيلها

ممتاز! فيما يلي أهم ما تعلمتموه في هذا الدرس:

  • تبدّل t(m) الصفوف والأعمدة، بينما تعيد t(t(m)) المصفوفة الأصلية
  • تعيد dim(m) <- c(r, c) تشكيل المصفوفة دون نسخها (مع ضرورة الحفاظ على عدد العناصر نفسه)
  • تُسطّح as.vector() البيانات عمودًا تلو الآخر، بينما تنشئ as.matrix() مصفوفة ذات عمود واحد
  • تكدّس rbind() الصفوف (مع ضرورة تساوي عدد الأعمدة)
  • تضم cbind() الأعمدة جنبًا إلى جنب (مع ضرورة تساوي عدد الصفوف)
  • تُحفظ الأبعاد المسماة عبر هذه العمليات
# Practical: merge data then compute column means
team_a <- matrix(c(82,78,91, 85,80,88), nrow = 2, byrow=TRUE)
team_b <- matrix(c(75,92,79, 88,84,93), nrow = 2, byrow=TRUE)
all_teams <- rbind(team_a, team_b)
colnames(all_teams) <- c('Speed', 'Accuracy', 'Strength')
cat('Combined teams:
'); print(all_teams)
cat('Average per skill:', colMeans(all_teams), '
')

الأسئلة الشائعة

هل درس «تبديل المصفوفات وإعادة تشكيلها» مجاني؟

نعم — نص درس «تبديل المصفوفات وإعادة تشكيلها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «تبديل المصفوفات وإعادة تشكيلها»؟

استخدم t() وdim() وعمليات reshape على المصفوفات. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «تبديل المصفوفات وإعادة تشكيلها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء المصفوفات باستخدام matrix()
  2. فهرسة المصفوفات واختيار أجزائها
  3. حسابات المصفوفات وعملياتها
  4. تبديل المصفوفات وإعادة تشكيلها
← العودة إلى R Academy