この再現可能な例のように見える data.table でさまざまな条件をテストしようとしています
set.seed(17)
year <- 1980 + rnbinom(10000,3,0.35)
event <- rep(LETTERS, length.out=10000)
z <- as.integer(runif(10000,min = 0, max = 10))
dt <- data.table(event,year,z)
setkey(dt, event,year)
dt <- dt[,sum(z), by=c("event","year")]
V1
(最後のコマンドから出てきます) は、イベントの発生回数を表します。
したがって、データ テーブルは順序付けられた配列であり、さまざまな関数を実行する必要があります。ここではいくつかの例を示します。
各イベントの過去 10 年間の発生数のローリング合計 (またはローリング平均) を計算するにはどうすればよいですか? したがって、A 1990の場合、必要な出力は 1,452 (1980 年から 1989 年の間) です。H 2012の出力は 11です。これは、2002 年から 2011 年の間に 11 回しか発生していないためです (2002 年に 3 回、2007 年に 3 回、2010 年に 5 回) 。A 1983の場合、出力は次のとおりです。
NA
過去 15 年間のうち少なくとも 12 年間にイベントが発生したかどうかを確認するにはどうすればよいですか? したがって、A 1997の場合、イベントは 15 年前の 12 年以上 (1982 年から 1996 年まで、1996 年以外は毎年発生) に発生したことがわかり、基準を満たしました。ただし、A 2001の場合、このイベントは過去 15 年間 (1986 年から 2000 年) のうち 11 年にのみ発生し、1996 年、1998 年、1999 年、2000 年には発生せず、基準が満たされていないことがわかります。ここでの望ましい出力は、個別の 1 (基準を満たしている) または 0 (基準を満たしていない)です。
理想的には、コードは 1 と 2 の両方の計算を有効にし、 1980 年から 2013 年の間years
に発生したdata.table
ものだけでなく、1980 年から 2013 年の間に欠落しているものも計算できるようにします。したがって、K 2005の場合、Q1 の結果を 25 (13 + 5 + 3 + 3 + 2) として計算できます (以前のエラーを指摘してくれた @Arun に感謝します)。第 2 四半期については、イベントが 1999 年、2000 年、2001 年、2003 年、2004 年に発生していないことがわかります。したがって、「15 年のうち少なくとも 12 年」という基準は満たされていません。また、イベントと年の組み合わせが data.table に存在するが、V1 の値が 0 である可能性もあります (行 18、A 2001 を参照)。理想的には、そのようなゼロの出現は非出現として扱われます (たとえば、V1 がゼロであるすべての行を削除することによって)。
2 つの質問を投稿することはめったにありませんが、それらは一緒に属しており、同様の問題に本当に関連していると思います。誰かがいくつかの提案をしてくれることを願っています。
どうもありがとう、
サイモン