التحويل بين الأنواع المنطقية والنصية
حوّل بين الأنواع المنطقية والنصية والرقمية باستخدام as.logical() وas.character().
التحويل بين الأنواع المنطقية والنصية درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
التحويل بين الأنواع
يوفر R دوال as.*() للتحويل بين جميع الأنواع الأساسية. يغطي هذا الدرس التحويلات بين الأنواع logical وcharacter وnumeric — وهي أكثر تحويلات الذهاب والإياب شيوعًا التي ستواجهها في تنظيف البيانات.
# Quick overview of as.*() functions
cat('as.logical(1): ', as.logical(1), '
') # TRUE
cat('as.numeric(TRUE): ', as.numeric(TRUE), '
') # 1
cat('as.character(3.14):', as.character(3.14), '
') # "3.14"
cat('as.logical("TRUE"):', as.logical('TRUE'), '
') # TRUEالتحويل من Numeric إلى Logical
عند تحويل عدد إلى logical: تصبح 0 القيمة FALSE، ويصبح أي عدد غير صفري TRUE. تنطبق هذه القاعدة على كل من integer وdouble.
cat('as.logical(0): ', as.logical(0), '
') # FALSE
cat('as.logical(1): ', as.logical(1), '
') # TRUE
cat('as.logical(-5): ', as.logical(-5), '
') # TRUE (non-zero)
cat('as.logical(0.001):', as.logical(0.001), '
') # TRUE (non-zero)
cat('as.logical(0L): ', as.logical(0L), '
') # FALSE
cat('as.logical(3L): ', as.logical(3L), '
') # TRUEالتحويل من Logical إلى Numeric
تتحول TRUE إلى 1، وتتحول FALSE إلى 0. ويشكل هذا التحويل أساس العديد من أساليب R الشائعة — مثل استخدام sum() لعدّ القيم TRUE أو mean() لحساب النسب.
cat('as.numeric(TRUE): ', as.numeric(TRUE), '
') # 1
cat('as.numeric(FALSE): ', as.numeric(FALSE), '
') # 0
cat('as.integer(TRUE): ', as.integer(TRUE), '
') # 1L
# Practical use: count TRUEs by summing
passed <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
cat('Passed count:', sum(as.numeric(passed)), '
') # 4
cat('Pass rate: ', mean(passed) * 100, '%
') # 66.67%as.logical() من السلاسل النصية
تحوّل as.logical('TRUE') وas.logical('FALSE') التمثيلات النصية إلى قيم منطقية. ويقبل R أيضًا 'T' و'F' كاختصارين. أما أي قيمة أخرى (بما فيها 'true' بالأحرف الصغيرة) فتُرجع NA.
cat('as.logical("TRUE"): ', as.logical('TRUE'), '
') # TRUE
cat('as.logical("FALSE"): ', as.logical('FALSE'), '
') # FALSE
cat('as.logical("T"): ', as.logical('T'), '
') # TRUE
cat('as.logical("F"): ', as.logical('F'), '
') # FALSE
cat('as.logical("yes"): ', as.logical('yes'), '
') # NA (not recognised)
cat('as.logical("true"): ', as.logical('true'), '
') # NA (case-sensitive!)التحويل من Numeric إلى Character
تحوّل as.character(x) عددًا إلى تمثيله النصي. ويفيد ذلك في إنشاء التسميات والمعرّفات، أو عندما تحتاج إلى إدراج أعداد في سلاسل نصية.
num_val <- 3.14159
char_val <- as.character(num_val)
cat('as.character(3.14159):', char_val, '
') # '3.14159'
cat('class:', class(char_val), '
') # character
# Building labels
ids <- 1:5
labels <- paste0('Item_', as.character(ids))
cat('Labels:', labels, '
')التحويل من Character إلى Numeric
تحلل as.numeric('3.14') سلسلة نصية وتحولها إلى double. وإذا تعذر تفسير السلسلة على أنها عدد، يُرجع R القيمة NA مع تحذير. تحقق دائمًا من صحة المدخلات قبل التحويل في التعليمات البرمجية المستخدمة في الإنتاج.
cat('as.numeric("3.14"): ', as.numeric('3.14'), '
') # 3.14
cat('as.numeric("100"): ', as.numeric('100'), '
') # 100
cat('as.numeric("-5.5"): ', as.numeric('-5.5'), '
') # -5.5
cat('as.numeric("abc"): ', as.numeric('abc'), '
') # NA with warning
cat('as.numeric("1e3"): ', as.numeric('1e3'), '
') # 1000 (sci notation OK)التحويل من Logical إلى Character
تنتج as.character(TRUE) السلسلة النصية 'TRUE'. ويفيد ذلك عندما تحتاج إلى تضمين قيم منطقية في مخرجات نصية أو ملفات مُصدّرة أو عمليات دمج السلاسل النصية.
flag_t <- TRUE
flag_f <- FALSE
cat('as.character(TRUE): ', as.character(flag_t), '
') # 'TRUE'
cat('as.character(FALSE):', as.character(flag_f), '
') # 'FALSE'
cat('class:', class(as.character(flag_t)), '
') # character
# In paste()
message <- paste('System status:', as.character(flag_t))
cat(message, '
')التحويل ذهابًا وإيابًا
يمكن عكس معظم التحويلات (التحويل ذهابًا وإيابًا)، لكنها قد تنطوي على بعض الفقد: قد يفقد numeric -> character -> numeric جزءًا من الدقة، تبعًا لطريقة تنسيق العدد كسلسلة نصية.
original <- 3.141592653589793
char_version <- as.character(original)
back_to_num <- as.numeric(char_version)
cat('Original: ', original, '
')
cat('As string: ', char_version, '
')
cat('Back: ', back_to_num, '
')
cat('Identical?:', identical(original, back_to_num), '
')
cat('Equal?: ', original == back_to_num, '
')تحويل المتجهات ذات المصادر المختلطة
عند تطبيق as.numeric() على متجه من المحارف، يُحوَّل كل عنصر على حدة. وتتحول العناصر التي يتعذر تحليلها إلى NA. وهذه هي الطريقة القياسية لتنظيف البيانات التي تبدو رقمية والمقروءة من ملفات CSV.
# Simulated data from CSV (all read as character)
raw_data <- c('42', '37.5', 'N/A', '55', '', '28.0')
cat('Raw character data:', raw_data, '
')
numeric_data <- suppressWarnings(as.numeric(raw_data))
cat('Converted: ', numeric_data, '
') # 42 37.5 NA 55 NA 28
cat('NA count: ', sum(is.na(numeric_data)), '
')التحويل المنطقي في ifelse()
يُعد الجمع بين as.numeric() وifelse()، أو الضرب المباشر في متجه منطقي، أسلوبًا شائعًا في R لإسناد الدرجات الشرطية أو هندسة السمات في تحليل البيانات.
# Score: 1 for correct, 0 for incorrect
quiz_answers <- c('A', 'C', 'B', 'D', 'B')
correct <- c('A', 'B', 'B', 'D', 'C')
is_correct <- quiz_answers == correct
cat('Correct: ', is_correct, '
')
cat('As 0/1: ', as.numeric(is_correct), '
')
cat('Score: ', sum(is_correct), '/', length(is_correct), '
')ملخص التحويلات
إليك ملخصًا لأهم التحويلات المنطقية والمحرفية:
as.logical(0)→FALSE؛ وأي قيمة غير صفرية →TRUEas.logical('TRUE'/'T')→TRUE؛ المطابقة حساسة لحالة الأحرف؛ والقيم الأخرى →NAas.numeric(TRUE)→1؛as.numeric(FALSE)→0as.character(x)→ التمثيل النصي لـ xas.numeric('3.14')→ 3.14؛ والسلاسل غير الرقمية →NAمع تحذير
# All conversions in one snippet
cat('logical->num: ', as.numeric(c(TRUE, FALSE)), '
')
cat('num->logical: ', as.logical(c(0, 1, -1, 0.5)), '
')
cat('char->num: ', suppressWarnings(as.numeric(c('5', 'abc', '3.1'))), '
')
cat('char->logical: ', as.logical(c('TRUE', 'FALSE', 'yes')), '
')
cat('logical->char: ', as.character(c(TRUE, FALSE)), '
')تحقق سريع
إلى ماذا تُقيَّم as.numeric(TRUE) + as.numeric(FALSE) في R؟
مراجعة: التحويل المنطقي والمحرفي
ممتاز! إليك أهم النقاط المستخلصة من هذا الدرس:
as.logical(0)→FALSE؛ والقيمة غير الصفرية →TRUE؛ و'TRUE'/'T'→TRUEas.numeric(TRUE)→1؛as.numeric(FALSE)→0- تحوّل
as.character(x)أي قيمة إلى صورتها النصية - تحلل
as.numeric('3.14')سلسلة رقمية؛ بينما تتحول السلاسل غير الصالحة إلىNA - تكون
as.logical('true')هيNA— فالمطابقة حساسة لحالة الأحرف (أما'TRUE'فتعمل) - يمكن عكس التحويلات في معظم الحالات؛ استخدم
suppressWarnings()عند تحويل أعمدة تحتوي على إدخالات يُتوقع أن تنتج NA
# Practical: parse a messy survey score column
raw_scores <- c('8', '7', 'N/A', '9', 'skip', '6')
numeric_scores <- suppressWarnings(as.numeric(raw_scores))
cat('Parsed:', numeric_scores, '
')
cat('Valid responses:', sum(!is.na(numeric_scores)), '
')
cat('Average score: ', round(mean(numeric_scores, na.rm = TRUE), 2), '
')الأسئلة الشائعة
هل درس «التحويل بين الأنواع المنطقية والنصية» مجاني؟
نعم — نص درس «التحويل بين الأنواع المنطقية والنصية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «التحويل بين الأنواع المنطقية والنصية»؟
حوّل بين الأنواع المنطقية والنصية والرقمية باستخدام as.logical() وas.character(). تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التحويل بين الأنواع المنطقية والنصية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نظرة عامة على نظام الأنواع في R
- التحويل بين الأنواع الرقمية
- التحويل بين الأنواع المنطقية والنصية
- مزالق الإكراه وأفضل الممارسات