تجميع أعمدة متعددة في data.table
-
12-12-2019 - |
سؤال
لدي العينة التالية 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
...
لا تنتمي إلى StackOverflow