私の(サンプル)データは次のようになります。
mydata <- structure(list(x1 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L), x2 = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 4L, 4L), x3 = c(1L, 3L, 5L, 1L, 3L, 5L, 1L, 4L, 5L, 2L,
1L, 5L, 6L, 6L), week = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 30L, 50L,
22L, 52L, 36L, 25L, 26L), newar1 = c(0L, 0L, 2L, 0L, 0L, 2L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), newvar2 = c(0L, 2L, 0L, 0L,
2L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L)), .Names = c("x1", "x2",
"x3", "week", "newar1", "newvar2"), class = "data.frame", row.names = c(NA,
-14L))
x1 x2 x3 week
0 1 1 0
0 2 3 0
0 3 5 0
0 1 1 0
0 2 3 0
0 3 5 0
1 1 1 1
1 2 4 30
1 3 5 50
1 1 2 22
1 2 1 52
1 3 5 36
1 4 6 25
1 4 6 26
1 つの新しい変数を作成したいと思いますnewvar1。
if x1 = 0 => データセット全体で x1 が 1 に等しい回数をカウントしたいのですが (自分の観測を除く他の行のみ)、x2 と x3 の同じ組み合わせの行と、週番号が 24 を超えています。
if x1 = 1 => データセット全体で x1 が 1 に等しい回数をカウントしたいのですが、x2 と x3 の同じ組み合わせの行と、週数から 25 を引いた値がゼロより大きい行のみをカウントします ((週-25)>0))。
「合計」とは、条件が満たされた場合に x1 が 1 に等しい回数を意味します。
「if」とは、if に続く条件が成立する場合にのみ x1 を合計したいという意味です。基本的に私の質問は、条件に基づいて特定の値のみを合計するにはどうすればよいですか?
私のデータは次のようになります。
x1 x2 x3 week newvar1
0 1 1 0 0
0 2 3 0 0
0 3 5 0 2
0 1 1 0 0
0 2 3 0 0
0 3 5 0 2
1 1 1 1 0
1 2 4 30 0
1 3 5 50 1
1 1 2 22 0
1 2 1 52 0
1 3 5 36 0
1 4 6 25 0
1 4 6 26 1
x2=x3現在、次のコードがありますが、これは週の制約を考慮していません。これを行う方法について何か提案はありますか?
mydata[,newvar1:=sum(x1), by=list(x2,x3)]