タイトル不明ですみません。対象の data.table は次のとおりです。
dt <- data.table(K=c("A","A","A","B","B","B"),Y=c("2010","2010","2011","2011","2011","2010"),Q1=c(2,3,4,1,3,4),Q2=c(3,3,3,1,1,1))
dt
K Y Q1 Q2
1: A 2010 2 3
2: A 2010 3 3
3: A 2011 4 3
4: B 2011 1 1
5: B 2011 3 1
6: B 2010 4 1
K の値が人であるとしましょう。したがって、ここには 2 つあります。年の四半期は、Q1 と Q2 に格納されます。Q2 は一種の参照四半期変数であり、値は常に 2011 年に関連しています)。ここで、dt でこれらの行を選択したいと思います。ここで、K の各 Person について、Q1 は Q2 の値の 4 四半期前の間隔にあります。
例:
個人 A の Q2 の値は 3 であるため、値 2 (2011 年)、1 (2011 年)、4 (2010 年)、および 3 (2010 年) を選択する必要があります。このデータセットを考慮すると、これは行 2 になります。行 3 の値 Q1=4 は大きすぎます。行 1 の値 Q1=2 は小さすぎます。2 番目の人物「B」については、6 行目のみが選択されます。これはQ2と同じ四半期であるため、ライン4ではありません(Q2の値よりも小さいもののみが必要であり、ライン5は明らかにQ2の値よりも大きくなっています.
dt_new
K Y Q1 Q2
1: A 2010 3 3
2: B 2010 4 1
要約すると、
Q2 の値が 4 であるということは、Y=2011 の場合、Q1 の 4 より小さいすべての値を選択し、Y=2010 の場合、Q1 の 4 以上 (つまり 4) のすべての値を選択することを意味します。結果: 3(2011)、2(2011)、1(2011)、4(2010)。この規則は、Q2 のすべての値に適用されます。これはすべて、各人に対して行う必要があります。
私の問題が明確になったことを願っています。これを解決する方法はたくさんあると思いますが、私はまだ data.table を学んでいるので、素敵でエレガントな解決策をお願いしたいと思いました (うまくいけば、何かあると思います)。
ありがとう
編集:
ほぼ解決策が見つかりました:これにより、論理的なベクトルが得られます。データセット内の行を抽出するにはどうすればよいですか?
setkey(dt,K)
dt[,(Q1<Q2 & Y=="2011")|(Q1>=Q2 & Y=="2010"),by="K"]
K V1
1: A FALSE
2: A TRUE
3: A FALSE
4: B FALSE
5: B FALSE
6: B TRUE
これを行わずに:
log <-dt[,(Q1<Q2 & Y=="2011")|(Q1>=Q2 & Y=="2010"),by="K"]$V1
dt[log]