سؤال

لدي العينة التالية data.table:

dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))

أرغب في تجميع كافة الأعمدة (أ و ب، على الرغم من أنه يجب أن تظل منفصلة) باستخدام المعرف colSums, ، على سبيل المثال.ما هي الطريقة الصحيحة للقيام بذلك؟ما يلي لا يعمل:

 dtb[,colSums, by="id"]

هذه مجرد عينة ويحتوي الجدول الخاص بي على العديد من الأعمدة لذا أريد تجنب تحديدها جميعًا في اسم الوظيفة

هل كانت مفيدة؟

المحلول

هذا هو في الواقع ما كنت أبحث عنه وهو مذكور في الأسئلة الشائعة:

dtb[,lapply(.SD,mean),by="id"]

نصائح أخرى

أعتقد في هذه الحالة أنه من الأسرع إحضار بياناتك أولاً في التنسيق الطويل ثم القيام بتجميعها بعد ذلك (راجع تعليقات ماثيو في هذا نشر ذلك):

library(data.table)
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
library(reshape2)
dt_long <- as.data.table(melt(dtb, id.var="id"))
dt_long[, sum(value), by=c("id","variable")]
    id variable  V1
 1:  1        a 601
 2:  2        a 440
 3:  3        a 496
 4:  4        a 553
 5:  5        a 444
 6:  6        a 466
 7:  7        a 525
 8:  8        a 553
 9:  9        a 541
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top