我有一个看起来像这样的数据框:
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)
}
但是得到一个错误的答案,谁能指出我犯的错误或提供任何其他选择。
在此先感谢您的帮助:)
问候,
阿米特