separate() وunite() لأعمدة السلاسل النصية
قسّم قيم الأعمدة التي تحتوي على أجزاء متعددة من المعلومات وادمجها.
separate() وunite() لأعمدة السلاسل النصية درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
تقسيم أعمدة السلاسل النصية ودمجها
غالبًا ما تحتوي البيانات الخام على أجزاء متعددة من المعلومات محشورة في عمود واحد؛ فمثلًا تحتوي '2024-03-15' على السنة والشهر واليوم. توفر دالتا separate() وunite() في tidyr إمكانية تقسيم عمود واحد إلى عدة أعمدة أو دمج عدة أعمدة في عمود واحد.
library(tidyr)
# Date stored as a single string column
df <- data.frame(
id = 1:4,
date = c('2024-01-15','2024-03-22','2023-11-08','2024-06-30'),
value = c(100, 200, 150, 175)
)
print(df)separate() — تقسيم عمود واحد إلى عدة أعمدة
تقسم separate(df, col, into, sep) عمودًا نصيًا إلى عدة أعمدة جديدة باستخدام فاصل. تحدد الوسيطة into أسماء الأعمدة الجديدة، بينما يحدد sep الفاصل؛ وقيمته الافتراضية هي أي محرف غير أبجدي رقمي.
library(tidyr)
df <- data.frame(
id = 1:4,
date = c('2024-01-15','2024-03-22','2023-11-08','2024-06-30')
)
# Split 'date' into year, month, day
separate(
df,
col = date,
into = c('year','month','day'),
sep = '-'
)separate() مع الوسيطة convert
تنشئ separate() أعمدة نصية افتراضيًا. اضبط convert = TRUE لتحويل الأعمدة الجديدة تلقائيًا إلى النوع الأنسب، مثل integer أو numeric أو logical. يفيد ذلك خصوصًا في أعمدة السنة والشهر.
library(tidyr)
df <- data.frame(
event = c('2024-1','2024-2','2023-12'),
score = c(85, 90, 78)
)
result <- separate(
df,
col = event,
into = c('year','month'),
sep = '-',
convert = TRUE
)
print(result)
cat('year type:', class(result$year), '\n')
cat('month type:', class(result$month))separate() مع remove = FALSE
تزيل separate() العمود الأصلي افتراضيًا. اضبط remove = FALSE للاحتفاظ به إلى جانب أعمدة التقسيم الجديدة. يفيد ذلك عندما تريد التحقق من عملية التقسيم أو الاحتفاظ بالعمود الأصلي للرجوع إليه.
library(tidyr)
df <- data.frame(
full_code = c('US-CA-001','US-TX-002','UK-LDN-003')
)
separate(
df,
col = full_code,
into = c('country','state','code'),
sep = '-',
remove = FALSE # Keep original column
)separate() عند مواضع ثابتة
بدلًا من استخدام فاصل، يمكنك التقسيم عند مواضع محارف ثابتة بتمرير متجه من الأعداد الصحيحة إلى sep. تحسب الأعداد الموجبة المواضع من اليسار، بينما تحسبها الأعداد السالبة من اليمين.
library(tidyr)
# Product code: first 3 chars = category, next 4 = id
df <- data.frame(
code = c('ABC1234','XYZ5678','DEF9012'),
qty = c(10, 20, 15)
)
separate(
df,
col = code,
into = c('category','product_id'),
sep = 3 # Split after position 3
)unite() — دمج الأعمدة في عمود واحد
تجمع unite(df, col, ..., sep) عدة أعمدة في عمود نصي واحد. الوسيطة الأولى بعد df هي اسم العمود الجديد، تليها الأعمدة المراد دمجها، ثم سلسلة الفاصل.
library(tidyr)
df <- data.frame(
first = c('Alice','Bob','Carol'),
last = c('Smith','Jones','White'),
score = c(85, 90, 78)
)
unite(
df,
col = 'full_name',
first, last,
sep = ' '
)unite() مع remove = FALSE
مثل separate()، تزيل unite() أعمدة المصدر افتراضيًا. اضبط remove = FALSE للاحتفاظ بالأعمدة الأصلية إلى جانب العمود المدمج الجديد. يفيد ذلك عندما تحتاج إلى الصيغتين معًا.
library(tidyr)
df <- data.frame(
year = c(2024, 2024, 2023),
month = c(1, 3, 12),
day = c(15, 22, 8)
)
unite(
df,
col = 'date_str',
year, month, day,
sep = '-',
remove = FALSE
)استخدام unite() لإنشاء المفاتيح
من الاستخدامات الشائعة لـ unite() إنشاء مفاتيح مركبة بدمج عدة أعمدة للمعرّفات. يفيد ذلك قبل ضم الجداول التي تحتاج إلى مفتاح مشترك مكوّن من عدة حقول.
library(tidyr)
library(dplyr)
orders <- data.frame(
year = c(2024, 2024, 2023),
region = c('East','West','East'),
seq_num = c(1, 1, 2)
)
orders_keyed <- orders %>%
unite(col = 'order_key', year, region, seq_num, sep = '_')
print(orders_keyed)separate_rows() — التقسيم إلى عدة صفوف
تقسم separate_rows(df, col, sep) الخلية التي تحتوي على قيم متعددة إلى صفوف منفصلة. يختلف ذلك عن separate() التي تقسم إلى أعمدة. وتفيد هذه الدالة عندما تحتوي الخلية على قائمة عناصر مفصولة بفواصل.
library(tidyr)
# Tags stored as comma-separated values in one cell
df <- data.frame(
id = 1:3,
title = c('Intro to R','Data Viz','ML Basics'),
tags = c('r,beginner','r,ggplot,visualization','r,ml,modeling')
)
separate_rows(df, tags, sep = ',')تسلسل separate() وunite()
يمكنك تسلسل separate() وunite() في خط أنابيب لإعادة تنسيق سلاسل التواريخ، أو إصلاح التنسيقات غير المتسقة، أو إنشاء معرّفات مركبة جديدة من الأعمدة الموجودة.
library(tidyr)
library(dplyr)
# Reformat date from YYYY-MM-DD to DD/MM/YYYY
df <- data.frame(
id = 1:3,
date = c('2024-01-15','2024-03-22','2023-11-08')
)
df %>%
separate(date, into=c('year','month','day'), sep='-') %>%
unite(col='date_eu', day, month, year, sep='/')معالجة الأجزاء الزائدة أو المفقودة
تحتوي separate() على وسيطة extra للتعامل مع وجود أجزاء أكثر من أعمدة into: 'warn' (الافتراضي)، أو 'drop' (تجاهل الأجزاء الزائدة)، أو 'merge' (الإبقاء على الجزء الأخير دون تقسيم). وبالمثل، تتعامل fill مع وجود أجزاء أقل، وتأخذ القيم: 'warn' أو 'right' أو 'left'.
library(tidyr)
# Inconsistent data: some rows have 2 parts, some have 3
df <- data.frame(
code = c('A-1','B-2-extra','C-3'),
value = c(10, 20, 30)
)
# 'merge' keeps the last piece unsplit
separate(df, code, into=c('prefix','suffix'), sep='-',
extra='merge')تحقق سريع
ما الدالة التي ستستخدمها لتقسيم الصفوف عندما يحتوي عمود على قيم مفصولة بفواصل، مثل 'tag1,tag2,tag3'، إلى صف واحد لكل وسم؟
مراجعة: separate() وunite()
أهم النقاط المتعلقة بـ separate() وunite():
separate(col, into, sep)— تقسيم عمود واحد إلى عدة أعمدة حسب الفاصل أو الموضعconvert = TRUE— تحويل أنواع نتائج التقسيم تلقائيًاremove = FALSE— الاحتفاظ بالعمود الأصلي في كلتا الدالتينunite(col, ..., sep)— دمج عدة أعمدة في عمود نصي واحدseparate_rows(col, sep)— تقسيم القيم المفصولة إلى عدة صفوف، لا أعمدة- تتعامل الوسيطتان
extraوfillمع نتائج التقسيم غير المتسقة
library(tidyr)
library(dplyr)
df <- data.frame(
id = 1:3,
datetime = c('2024-01-15 09:30','2024-03-22 14:15','2023-11-08 11:45')
)
df %>%
separate(datetime, into=c('date','time'), sep=' ') %>%
separate(date, into=c('year','month','day'), sep='-', convert=TRUE) %>%
separate(time, into=c('hour','minute'), sep=':', convert=TRUE)الأسئلة الشائعة
هل درس «separate() وunite() لأعمدة السلاسل النصية» مجاني؟
نعم — نص درس «separate() وunite() لأعمدة السلاسل النصية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «separate() وunite() لأعمدة السلاسل النصية»؟
قسّم قيم الأعمدة التي تحتوي على أجزاء متعددة من المعلومات وادمجها. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «separate() وunite() لأعمدة السلاسل النصية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- من العريض إلى الطولي باستخدام pivot_longer()
- من الطولي إلى العريض باستخدام pivot_wider()
- separate() وunite() لأعمدة السلاسل النصية
- تضمين إطارات البيانات وفك تضمينها