سؤال

استخدام البيانات المنظمة على النحو

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 كما هو مذكور أعلاه، ولكن مع أحد التغييرين التاليين:

  1. يستبدل setdiff مع function(x,y)setdiff(x$id, y$id)
  2. يستبدل dtl مع ids <- lapply(dtl, "[", "id")

تحرير 2::لقد قمت بتغيير المخرجات المتوقعة مرة أخرى عن طريق إضافة وصف إنجليزي عادي لا يتطابق مع الكود الذي قدمته...أنا يفكر أنت الآن تبحث عن هذا:

mapply(function(x,y)y[setdiff(y$id, x$id), ],
       head(dtl, -1), tail(dtl, -1), SIMPLIFY = FALSE)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top