setdiff متتالية في قائمة datatable
-
11-12-2019 - |
سؤال
استخدام البيانات المنظمة على النحو
dtl <- replicate(10,data.table(id=sample(letters,10),val=sample(10)), simplify=F)
lapply(dtl, function(x){setkey(x,'id')})
أحتاج إلى استخراج قائمة جداول البيانات التي تحتوي على الصفوف في dtl[[n+1]]] مع بطاقة تعريف غير موجود في dtl[[n]].أفترض أنه سيكون شيئا من هذا القبيل
dtl2 <- list(setdiff(dtl[[1]][['id']],dtl[[2]][['id']]),setdiff(dtl[[2]][['id']],dtl[[3]][['id']]...)
يرجى ملاحظة أنه على الرغم من أن setdiff يجب أن يأخذ فقط بطاقة تعريف في الاعتبار، أتوقع أن تحتوي النتيجة على جميع الأعمدة من كل جدول بيانات.
المحلول
أعتقد أن هذا سيفعل ذلك من أجلك:
mapply(setdiff, head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
يحرر:مع الناتج الجديد المتوقع، سأظل أستخدمه mapply
كما هو مذكور أعلاه، ولكن مع أحد التغييرين التاليين:
- يستبدل
setdiff
معfunction(x,y)setdiff(x$id, y$id)
- يستبدل
dtl
معids <- lapply(dtl, "[", "id")
تحرير 2::لقد قمت بتغيير المخرجات المتوقعة مرة أخرى عن طريق إضافة وصف إنجليزي عادي لا يتطابق مع الكود الذي قدمته...أنا يفكر أنت الآن تبحث عن هذا:
mapply(function(x,y)y[setdiff(y$id, x$id), ],
head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
لا تنتمي إلى StackOverflow