0

次のようなデータフレームがあります。

inter_cv_vars <- data.frame( 
I_Org_ZB1 = rep(0:1,each = 2, len = 20),
I_Org_ZB2 = rep(0:1,each = 1, len = 20),
I_Org_ZB3 = rep(0:1,each = 3, len = 20),
I_Org_ZB4 = rep(0:1,each = 4, len = 20),
I_Org_ZB5 = rep(0:1,each = 5, len = 20),
I_Org_ZB6 = rep(0:1,each = 1, len = 20),
I_Org_ZB7 = rep(0:1,each = 3, len = 20),
I_Org_ZB8 = rep(0:1,each = 2, len = 20),
I_Org_ZB9 = rep(0:1,each = 4, len = 20),
I_Org_ZB10 = rep(0:1,each = 6, len = 20),
I_Org_ZB11 = rep(0:1,each = 2, len = 20),
I_Org_ZB12 = rep(0:1,each = 1, len = 20))

O_ZERO_BILLING_CNT_TRL_Y1次の条件に基づいて、このデータフレームに新しい列 " " を作成したいと考えています。

列 " " から始まる連続した "1" 値の合計。I_Org_ZB1シーケンスが壊れている場合、列 " O_ZERO_BILLING_CNT_TRL_Y1" の値は、連続した "1" 値が発生するまでのシーケンスになります。

例:- の値I_Org_ZB1 I_Org_ZB2 I_Org_ZB3 が 1,1,1 n で他のすべての値がゼロの場合、列 " O_ZERO_BILLING_CNT_TRL_Y1" の値は 3 になりますが、値が 1,0,1 で他のすべての列が 0 の場合、" O_ZERO_BILLING_CNT_TRL_Y1"の値は次のようになります。 1 になります。特定の行ですべての値が 1 の場合、列の値は 12 になります。

以下のコードを試しました:

for (i in 1:12){

if(i == 12)
{next}

ifelse(inter_cv_vars$I_Org_ZB1 == 1,

inter_cv_vars$O_ZERO_BILLING_CNT_TRL_Y1 <- ifelse(

rowSums(inter_cv_vars[,1:eval(parse(text=sprintf("(12-%s+1)",i)))]) == eval(parse(text=sprintf("(12-%s+1)",i))),

eval(parse(text=sprintf("(12-%s+1)",i))),0),

0)

}

しかし、間違った答えを得た場合、誰かが私が犯した間違いを指摘したり、他の代替手段を提供したりできます.

よろしくお願いします:)

よろしく、

アミット

4

1 に答える 1

2

これは最適化にはほど遠いですが、必要なものがあればうまくいくはずです:

apply(inter_cv_vars,1,function(x) max(cumsum(x)*cumprod(x)))
#[1] 0 0 1 3 0 0 1 2 0 0 1 3 0 0 1 9 0 0 1 2
于 2015-05-02T13:07:06.637 に答える