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 回答