كيفية الانضمام إلى إطارات البيانات عبر أعمدة متعددة باستخدام dplyr


يمكنك استخدام بناء الجملة الأساسي التالي لربط إطارات البيانات في R بناءً على أعمدة متعددة باستخدام dplyr:

 library (dplyr)

left_join(df1, df2, by=c(' x1 '=' x2 ', ' y1 '=' y2 '))

سيقوم بناء الجملة هذا بإجراء صلة يسرى عندما تكون الشروط التالية صحيحة:

  • القيمة الموجودة في العمود x1 من df1 تتطابق مع القيمة الموجودة في العمود x2 من df2.
  • تتوافق قيمة العمود y1 في df1 مع قيمة العمود y2 في df2.

يوضح المثال التالي كيفية استخدام بناء الجملة هذا عمليًا.

مثال: انضم إلى أعمدة متعددة باستخدام dplyr

لنفترض أن لدينا إطاري البيانات التاليين في R:

 #define first data frame
df1 = data. frame (team=c('A', 'A', 'B', 'B'),
                 pos=c('G', 'F', 'F', 'G'),
                 dots=c(18, 22, 19, 14))

df1

  team pos points
1 AG 18
2 AF 22
3 BF 19
4 BG 14

#define second data frame
df2 = data. frame (team_name=c('A', 'A', 'B', 'C', 'C'),
                 position=c('G', 'F', 'F', 'G', 'F'),
                 assists=c(4, 9, 8, 6, 5))

df2

  team_name position assists
1 GA 4
2 AF 9
3 BF 8
4 CG 6
5 CF 5

يمكننا استخدام بناء الجملة التالي في dplyr لإجراء صلة يسارية بناءً على عمودين:

 library (dplyr)

#perform left join based on multiple columns
df3 <- left_join(df1, df2, by=c(' team '=' team_name ', ' pos '=' position '))

#view result
df3

  team pos points assists
1 AG 18 4
2 AF 22 9
3 BF 19 8
4 BG 14 NA

يحتوي إطار البيانات الناتج على جميع الصفوف من df1 والصفوف فقط من df2 حيث تتطابق قيم الفريق والموضع.

لاحظ أيضًا أنه إذا كان كلا إطاري البيانات يشتركان في نفس أسماء الأعمدة، فيمكنك ببساطة استخدام بناء الجملة التالي لربط أعمدة متعددة:

 library (dplyr)

#perform left join based on multiple columns
df3 <- left_join(df1, df2, by=c(' team ', ' position '))

مصادر إضافية

تشرح البرامج التعليمية التالية كيفية تنفيذ العمليات الشائعة الأخرى في R:

كيفية القيام بالانضمام الأيسر في R
كيفية القيام بالانضمام الصحيح في R
كيفية القيام بالانضمام الداخلي في R
كيفية القيام بصلة خارجية في R

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *