我有一些35,000行。如果preventtive_chem值为“Y”,则prev_efficacy的值在过去3天为5,3,1,在下一周为10到1。样例输出在img文件中。R for循环,为新变量赋值增量值
Prev_Chem Date prev_effi
0 7/3/2016 0
0 7/4/2016 0
0 7/5/2016 1
0 7/6/2016 3
Y 7/7/2016 5
0 7/8/2016 10
0 7/9/2016 9
0 7/10/2016 8
0 7/11/2016 7
0 7/12/2016 6
0 7/13/2016 5
0 7/14/2016 4
0 7/15/2016 3
0 7/16/2016 2
0 7/17/2016 1
0 7/18/2016 0
0 7/19/2016 0
如果preventive_chem值为0,则prev_efficacy值为0
当我尝试这个代码,
*df$PreventEffic <- rep(0,nrow(df))
for(i in 1:nrow(df))
{
if(df$Preventive_Chem1[i] == "Y")
{
df$PreventEffic[i] <- 5
df$PreventEffic[i-2] <- 1
df$PreventEffic[i-1] <- 3
df$PreventEffic[i+1] <- 10
df$PreventEffic[i+2] <- 9
df$PreventEffic[i+3] <- 8
df$PreventEffic[i+4] <- 7
df$PreventEffic[i+5] <- 6
df$PreventEffic[i+6] <- 5
df$PreventEffic[i+7] <- 4
df$PreventEffic[i+8] <- 3
df$PreventEffic[i+9] <- 2
df$PreventEffic[i+10] <- 1
}
}*
这将需要大量的时间来运行代码和返回值0到1016321行。有没有有效的方法来处理这个问题,而不使用“for循环”。
将来,请始终输入您的样本数据,例如'dput(df)',这样我们就可以复制和粘贴你的数据,但在这之前,请修复与命名约定不一致的地方 - 为什么你的if语句中df的colname不同? 'Prev_Chem'与'Preventive_Chem1'。我在下面提供解决方案。 – Djork
我们是否需要考虑数字分配之间的任何重叠?也就是说,是否会有Prev_Chem的+10和-3范围内出现2个Y的事件? – JPHwang
Teenu Ss,我强烈建议你接受@ R.S.的回答,但考虑一下'Y'的晚期角落案例,作为我的回答和评论。 – r2evans