&安培; IF循环中的语句不起作用

时间:2014-12-11 14:02:25

标签: r loops if-statement for-loop

我真的不知道我做错了什么。

此代码在R Studio中不起作用(我尝试过多次小改动但无效):

Data3$Rebound3<-0
for (i in 2:length(Data3)){
  if((Data3$etype[i] == 'SHOT') && (Data3$etype[i-1] == 'SHOT')){
    Data3$Rebound3[i]<-1}}

但这两个代码有效:

Data3$Rebound3<-0
for (i in 2:length(Data3)){
  if(Data3$etype[i] == 'SHOT'){
    Data3$Rebound3[i]<-1}}

Data3$Rebound3<-0
for (i in 2:length(Data3)){
  if(Data3$etype[i-1] == 'SHOT'){
    Data3$Rebound3[i]<-1}}

先谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以在没有for循环

的情况下执行此操作
 indx <- with(Data3, c(FALSE,etype[-1]=='SHOT' & etype[-nrow(Data3)]=='SHOT'))
 Data3$Rebound3 <- indx+0
 head(Data3)
 #           etype Rebound3
 #1           SHOT        0
 #2           SHOT        1
 #3 SOMETHING ELSE        0
 #4      SOMETHING        0
 #5      SOMETHING        0
 #6 SOMETHING ELSE        0

关于您的代码,2:length(Data3)将提供column索引而不是row索引(如果我从您的代码中理解的话)。我想你想要row索引。也许,

Data3$Rebound3<-0
for(i in 2:nrow(Data3)){
     if(Data3$etype[i] == 'SHOT' & Data3$etype[i-1] == 'SHOT'){
         Data3$Rebound3[i]<-1
     }
   }

Data3$Rebound3
#[1] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

数据

 set.seed(24)
 Data3 <- data.frame(etype=sample(c('SHOT', 'SOMETHING', 'SOMETHING ELSE'),
                 20, replace=TRUE))