تحرير أطر البيانات - عمليات أولية ، المقال الثاني

بعد التعرض إلى مجموعة من التعليمات التي تعلمنا عن خصائص في شكل و المحتوى الإحصائي لأطر البيانات التي ناقشناها في المقال السابق ، سنتعرض هنا إلى تحرير أطر البيانات ، و بالأخص كيفية إدراج بيانات وتغييرها أو حذفها و إضافة أعمدة أو أسطر ، استخراج أطر بيانات فرعية ، تغيير أسماء الأعمدة (المتغيرات) أو الأسماء و كذا تحويل أطر البيانات إلى أشكال بيانية أخرى.

فهرس المقال

  1. إضافة قيم إلى إطار بيانات
  1. تحرير ، تغيير و تصحيح البيانات

  2. حذف البيانات

  1. تحويل أطر البيانات إلى أشكال بيانات أخرى مثل المصفوفات أو القوائم

خلاصة

1. إضافة قيم إلى إطار بيانات

سنتعرض هنا كيفيات مختلفة إلى إدراج بيانات و تغييرها في أطر البيانات و ذلك عبر عدة طرق و ووفق أهداف متعددة :

إضافة أعمدة

كثيرا ما يحتاج محلل البيانات لإضافة أسطر إلى جدوله أو إطار البيانات الذي يشتغل عليه. لهذا الغرض يمكنه إنشاء متغيرات جديدة بشكل مستقل لنفس المشاهدات الخاصة بجدوله (أي بنفس عدد الأسطر) ثم يضيفها إلى إطار بيانه أو إلى إطار بيانات جديد عبر الوظيفة ()cbind و التي هي اختصار لكلمة column bind و باستعمال الصيغة التالية dataframe <- cbind(dataframe, new_variable(value1, value2, ...)). يمكن كذلك استعمال الوظيفة cbind.data.frame() مكان ()cbind .

تجد أسفله مثالا حول إطار البيانات السابق الذي اشتغلنا عليه حيث سنضيف متغير جديد بعنوان المهنة ثم نضمه إلى إطار البيانات my_dataframe و نحفظ المعطيات المحينة في إطار بيانات جديد هو update1_my_df :


المهنة <- c("التعليم","الطب","المعمار")

update1_my_df <- cbind(my_dataframe,المهنة) #تحديث إطار البيانات بإضافة عمود المهنة
print(update1_my_df)

# الاسم العمر المدينة  المهنة
#1  أحمد    25 الجزائر التعليم
#2 فاطمة    30    بسكرة    الطب
#3  خالد    28  تلمسان المعمار

إضافة أسطر

في نفس الإطار ، يمكننا إضافة مشاهدات جديدة لإطار البيانات باستعمال الأمر rbind() أو rbind.data.frame() و التي هي اختصار لعبارة row bind عبر إدراج المشاهدات الجديدة في متغير جديد على شكل قائمة أو متجه معنون بعنوان المشاهدة ثم نربطه بإطار البيانات الأول بالصيغة rbind(dataframe, new_variable(value1, value2, ...)).

في المثال الأتي سنعمل على إضافة مشاهدة جديدة و هي الخاصة بعضو جديدة اسمها سليمة و هي مقاولة من الأغواط عمرها 45 سنة. نستعمل هنا أمر rbind() . و لكن قبيل ذلك يجب أولا تعريف المتغير salima الذي يحمل معلومات العضو الجديدة. نختار هنا أن نضيف هذا المتغير على شكل قائمة-list أي بالصيغة list()و هذا بغرض المحافظة على طبيعة البيانات المختلفة حين إضافته إلى إطار البيانات.

salima<-list("سليمة",45,"الأغواط","المقاولة")

بعد ذلك ، نضيف المتغير salima إلى إطار البيانات المحين update1_my_df بتحديثه و حفظه في إطار جديد هو update2_my_df كما يلي :

update2_my_df <- rbind(update1_my_df,salima)

print(update2_my_df)
#  الاسم العمر المدينة   المهنة
#1  أحمد    25 الجزائر  التعليم
#2 فاطمة    30    بسكرة     الطب
#3  خالد    28  تلمسان  المعمار
#4 سليمة    45 الأغواط المقاولة

لاحظ أن بيانات العضو الجديد قد أضيفت أسفل الجدول.

يمكن التأكد من أن طبيعة البيانات بقيت على حالها بعد هذه الإضافة و ذلك بالأمر الذي رأيناه أعلاه و هو str(dataframe) :

str(update2_my_df)
#'data.frame':	4 obs. of  4 variables:
# $ الاسم  : chr  "أحمد" "فاطمة" "خالد" "سليمة"
# $ العمر  : num  25 30 28 45
# $ المدينة: chr  "الجزائر" "بسكرة" "تلمسان" "الأغواط"
# $ المهنة : chr  "التعليم" "الطب" "المعمار" "المقاولة"

لاحظ هنا أن كل البيانات حافظت على طبيعتها حيث المتغيرات الاسم ، المدينة و المهنة هي سلاسل حروف أما االمتغير العمر بقي متغيرا عدديا.

يمكن كذلك تعريف معطيات العضو الجديد بإدخاله كمتجه و ليس كقائمة ، أي بالصيغة variable <- c(value1, value2, value 3 , ...). في هذه الحالة سيتم تحويل جبري (coercition) لكل المعطيات الموجودة إلى سلاسل حروف سواءا ضمن المتجه أو حتى في إطار البيانات بعد الإضافة و هو الأمر الذي يستلزم إعادة تحويل البيانات العددية إلى أصلها كبيانات عددية. سنتناول هاته الإشكالية في آخر هذا المقال.

2. تحرير ، تغيير و تصحيح البيانات

سيحتاج المحلل حال الخطأ كثلا أن يغير قيمة بعينها بغض النظر عن سطرها أو عمودها في إطار البيانات في هذه الحالة ، يمكن استعمال نفس طريقة الوصول إلى قيمة بعينهاكما رأينا أعلاه و لكن بإدراج قيمة جديدة كما في الصيغة التي تحدد ترتيب المعطى في الأسطر (x) و الأعمدة (y) dataframe[x,y] <- new_value أو الصيغة باستعمال اسم العمود dataframe$column[index] <- value

فيما يلي ، سنتناول مثالا خاصا بإطار البيانات update2_my_df و لكن قبل ذلك و لغرض المثال ، سنطعم إطار بياناتنا أولا بمتغيرات جديدة و هي الهواية (بيانات نصية) الخاصة بالأعضاء و كذا سنة_الانتساب (بيان عددي).

نبدأ أولا بإدراج الهواية و ذلك بتعريف متغير نضمنه هوايات الأعضاء و سنوات الانتساب بالترتيب.

هواية <- c("قراءة", "تصوير", "عزف", "أمل", "تطوع")
انتساب <- c(2010,2012,2115,2020,2024)

ثم نضم المتغيرين الجديدين إلى إطار البيانات باستخدام أمر cbind() أو cbind.data.frame() بضم المتغير هواية إلى الإطار update2_my_df و نسجل العملية في المتغير الجديد update3_my_df حسب مايلي :

update3_my_df <- cbind(update2_my_df,هواية, انتساب)
class(update3_my_df) #[1] "data.frame"

إن تمت العملية بشكل صحيح ، ستكون النتيجة كما يلي :

update3_my_df
update3_my_df

#  الاسم العمر المدينة   المهنة هواية انتساب
#1  أحمد    25 الجزائر  التعليم قراءة   2010
#2 فاطمة    30    بسكرة     الطب تصوير   2012
#3  خالد    28  تلمسان  المعمار   عزف   2115
#4 سليمة    45 الأغواط المقاولة  أمل   2020
#5  سليم    25 الجزائر  الفلاحة  تطوع   2024

بعد مراجعة الجدول ، لاحظنا بعض الخطأ في المعطيات الجديدة حيث أن المعطى الثالث (3)من العمود الخامس (5) الخاص بسنة الانتساب يعطينا قيمة 2115 بدل 2015 و أن المعطى الرابع (4) من العمود الرابع (4) الخاص بالهواية يشير إلى النص ‍‍”أمل” بدل ‍”تأمل”. على آر ، يمكن الوصول إلى هاته المعطيات كما رأينا بكتابة الصيغ التالية:

الحالة الأولى : بكتابة إحدى الصيغ التالية

 #الصيغة الأولى باعتماد ترتيب الأسطر و الأعمدة
 update3_my_df[3,5]
 #الصيغة الثانية باعتماد اسم العمود
 update3_my_df$ انتساب[3]

نلاحظ أن مخرجات هاته الكتابة تشير إلى المعطى المعني ‍2115

الحالة الثانية :

بكتابة إحدى الصيغ التالية :

 #الصيغة الأولى باعتماد ترتيب الأسطر و الأعمدة
 update3_my_df[4,4]
 #الصيغة الثانية باعتماد اسم العمود
 update3_my_df$ هواية[4]

نلاحظ أن مخرجات هاته الكتابة تشير إلى المعطى المعني ‍"أمل"

من أجل التصحيح ، سنستعمل في كل مرة صيغة مختلفة و نقيّم النتائج :

الحالة الأولى :

نستعمل هنا الصيغة باعتماد ترتيب المعطى في الأسطر و الأعمدة. بالنسبة للمعطى update3_my_df[3,5] ، ندخل القيمة الصحيحة 2015 مكان القيمة الخاطئة 2115 ثم نطلب من آر طبع النتيجة باستعمال الأمر print() حسب ما يلي :

update3_my_df[3,5] <- 2015
print(update3_my_df[3,5])

نلاحظ أن النتيجة تغيرت و تم تصحيحها.

الحالة الثانية :

نستعمل هنا الصيغة الأخرى باعتماد اسم العمود. بالنسبة للمعطى update3_my_df$هواية[4] ، ندخل القيمة الصحيحة ‍"تأمل" مكان القيمة الخاطئة "أمل" ثم نطلب من آر طبع النتيجة باستعمال الأمر print() حسب ما يلي :

update3_my_df$هواية[4] <-
"تأمل"

print(update3_my_df$هواية[4])

نلاحظ أن النتيجة تغيرت و تم تصحيحها.

3. حذف البيانات

يمكن كذلك حدف بيانات منفردة من جداول أطر المعلومات ، حذف أسطر أو أعمدة. أبسط طريقة لذلك هي إرفاق العنصر المراد حذفه بعلامة - تسبق العنصر المراد حذفه.

عند العمل على البيانات على آر، قد نحتاج إلى حذف أعمدة، صفوف، أو حتى قيم فردية من إطار البيانات. سنستعرض الطرق المختلفة لحذف القيم.

حذف عمود من إطار البيانات

لحذف عمود معين من إطار البيانات، نستخدم الفهرسة السلبية (negative indexing). يمكن اتباع طرق أخرى عديدة لكن هذه الطريقة هي الأبسط بينها. نستعمل لهذا الصيغة التالية :

newdataframe <- dataframe[,-column_index]

هنا تجد مثالا خاصة بإطارنا الناتج من الفقرة السابقة update2_my_df. سنحذف منه العمود الثالث الخاص بالمدينة فرضا ، اتضح أننا بصدد سبر هوايات الفريق لغرض إنشاء أندية فرعية و لذا فلن نحتاج للعمود الثالث بينما سننشئ عمودا آخر حول الهواية. أسفله ، نستعمل الفهرسة السلبية لحذف العمود الخاص بالمدينة انطلاقا من رقم ترتيبه ونخزن النتيجة في المتغير update3_my_df.

update3_my_df <- update2_my_df[,-3]

# عرض الإطار الجديد بعد حذف العمود
print(update3_my_df)

يمكن استعمال الصيغة الخاصة بفهرس العمود مباشرة ، أي update2_my_df[-3] بدلا من update2_my_df[,-3]، أي بدون فاصلة. جرب هذه الصيغة كذلك.

حذف صف من إطار البيانات

لحذف صف معين، نستخدم نفس الفكرة الخاصة بحذف الأعمدة، ولكن على مستوى الصفوف أي بالصيغة :

newdataframe <- dataframe[-row_index,]

لاحظ أننا استعملنا الفهرسة السلبية قبيل الفاصلة للإشارة إلى الأسطر. سنجرب إلغاء سطر من إطار المعلومات السابق update2_my_df و نخزنه في متغير جديد update4_my_df :

update4_my_df <- update2_my_df[-2,]

# عرض الإطار الجديد بعد حذف الصف
print(update4_my_df)

حذف قيمة فردية من إطار البيانات

إذا أردنا حذف قيمة معينة داخل إطار البيانات، فإنه لا يمكن إلغاء مكانها تماما و لكنها تعين كقيمة مفقودة NA.

update5_my_df <- update2_my_df

# استبدال القيمة في الصف الثاني والعمود الثاني بـ NA
update5_my_df[2,2] <- NA

# عرض الإطار بعد التعديل
print(update5_my_df)

4. تحويل أطر البيانات إلى بنى معلومات أخرى

في كثير من الحالات ، نحتاج إلى تحويل أطر البيانات إلى أنواع بيانات أخرى في آر. نذكر منها المصفوفات أو القوائم و غيرها.

تحويل إطار بيانات إلى مصفوفة

في بعض الأحيان ، تحتاج بعض المعاملات إلى تحويل إطار البيانات إلى مصفوفة. يستعمل هنا الأمر as.matrix() مثلما هو موضح أسفله.

matrix_data <- as.matrix(dt)
print(matrix_data)

تحويل إطار بيانات إلى قائمة

تعتبر أطر البيانات شكلا متطورا من القوائم و مبنية عليها كما رأينا في المقال الأول. يمكن إذاً تحويلها إلى هاته الأخيرة باستعمال الوظيفة as.list() كما هو مبين هنا :

list_data <- as.list(dt)
print(list_data)

خلاصة

  • يمكن قراءة الملفات النصية (*.txt) باستخدام read.table() أو read.delim().
  • يمكن قراءة ملفات CSV (*.csv) باستخدام read.csv() أو read.csv2().
  • لحفظ البيانات، نستخدم write.table() للملفات النصية و write.csv() أو write.csv2() لملفات CSV.
  • يفضل دائمًا تحديد row.names = FALSE عند الكتابة لتجنب إضافة أرقام الصفوف تلقائيًا.
كُتب في 13/05/2025