كيفية إزالة متتالية الصفوف المكررة في KDB ؟

StackOverflow https://stackoverflow.com//questions/23015220

  •  21-12-2019
  •  | 
  •  

سؤال

على سبيل المثال, إذا كنت قد الجدول أدناه ، ثم أريد أن إزالة الصف 3:

Stock   Price
-------------------
GOOG    101
GOOG    102
GOOG    102     <- want to remove this
GOOG    101

ملاحظة:على الرغم من الصف 4 هو نسخة مكررة من الصف 1 ، أنا لا أريد أن إزالة ذلك لأنه ليس متتالية مكررة.أي أنه ليس نسخة مكررة من الصف فورا أعلاه.

وأود أيضا أن تحقق عن التكرارات في العديد من المجالات ، ليس فقط Price.

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

المحلول

d:([]Stock:4#`GOOG;Price:101 102 102 101)
q)d
Stock Price
-----------
GOOG  101
GOOG  102
GOOG  102
GOOG  101

q)d where not d~'prev d
Stock Price
-----------
GOOG  101
GOOG  102
GOOG  101

نصائح أخرى

يمكنك أيضا استخدام differ

q)t:([]stock:4#`GOOG; price:101 102 102 101)
q)differ t
1101b
q)t where differ t
stock price
-----------
GOOG  101
GOOG  102
GOOG  101

الآن دعونا نفترض أن هناك وقتا العمود كما أشرت في تعليقك أعلاه

q)t:update time:til count i from t
q)t
stock price time
----------------
GOOG  101   0
GOOG  102   1
GOOG  102   2
GOOG  101   3
q)t where differ `stock`price#t
stock price time
----------------
GOOG  101   0
GOOG  102   1
GOOG  101   3

الآن العودة إلى t بدون عمود الوقت عن البساطة.هذا يمنحك السرعة على الطريقة البديلة المقترحة من قبل @jgleeson (والتي أعتقد أنها كبيرة ، ولكن السرعة هو دائما موضع ترحيب إذا اعتقدت أن حصة هذا بغض النظر)

q)\ts do[10000;r:t where differ t]
31 1184j
q)\ts do[10000;r2:t where not t~'prev t]
62 1488j
q)r~r2
1b
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top