الإضافة والترتيب
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 45 من 64.
تؤدي الإسنادات إلى اسم عمود جديد إلى إضافة العمود. تعمل العمليات الحسابية بين الأعمدة صفًا بصف، مثل أي عمليات حسابية على المتجهات:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)الناتج:
item qty price total
1 tea 2 4.0 8.0
2 jam 5 2.5 12.5
3 oil 1 9.0 9.0df[order(df$col), ] يرتّب الصفوف حسب عمود. تبقى أرقام الصفوف على اليسار مرتبطة بالصفوف الأصلية. استخدم علامة الطرح أو decreasing = TRUE للترتيب من الأعلى إلى الأدنى، ومفتاحًا ثانيًا عند التساوي:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])الناتج:
item total
2 jam 12.5
3 oil 9.0
1 tea 8.0يمكن أن يكون العمود الجديد نصًا مبنيًا من أعمدة أخرى. تعمل sprintf() على الأعمدة بأكملها دفعةً واحدة:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)الناتج:
[1] "2 x tea" "5 x jam"rbind() يضيف صفًا من إطار بيانات مكوّن من صف واحد وله الأعمدة نفسها، وhead(df, n) يحتفظ بالصفوف n الأولى:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))الناتج:
[1] 3
item qty
2 jam 5
1 tea 2التحدي
سهلأكمل order_totals(df). يحتوي df على الأعمدة item وqty وprice. أضف عمود total (الكمية مضروبة في السعر)، وفرز الصفوف حسب الإجمالي من الأعلى إلى الأقل (العناصر ذات الإجماليات المتساوية أبجديًا)، وأعد سطرًا واحدًا لكل صف، jam: 12.50، مع عرض الإجمالي حتى منزلتين عشريتين.
يقرأ الكود المزوّد الجدول من الإدخال باستخدام read.csv(text = input): يحتوي السطر الأول على أسماء الأعمدة، وكل سطر تالٍ يمثل صفًا واحدًا، مع فصل القيم بفواصل. يطبع الكود كل سطر مُعاد.
جرّب بنفسك
order_totals <- function(df) {
# اكتب الكود الخاص بك هنا
character(0)
}
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهم3المجموعات والعدّ
القيم الفريدةعمليات المجموعاتاختبارات الانتماءالعد باستخدام table()مراجعة - ضيوف الفعالية9إطارات البيانات
إنشاء إطارات البياناتالأعمدة والصفوفتصفية الصفوفالإضافة والترتيبمراجعة - تقرير المبيعاتتدرّب بنفسك: مترجم R عبر الإنترنت