如果否则:else部分不返回输出

时间:2018-07-29 02:49:45

标签: r function conditional

我目前正在尝试遍历整数和字符的数据框,并有条件地更改每一行的一个值。对于所有不符合条件的行,我只想将它们重新添加到填充有已修改行的新数据框中。

我以前这样做很顺利,但是我似乎已经凝视了太久而没有任何启发。

a<-data.frame(cbind(1,'a',2,'c',3,'d'), stringsAsFactors = F)
b<-data.frame(cbind(1,'a',2,'c',3,'g'), stringsAsFactors = F)
c<-data.frame(cbind(1,'f',4,'g',5,'h'), stringsAsFactors = F)

x<-rbind(a,b,c)

fun<-function(x){
  fin<-NULL
  for(i in 1:nrow(x)){
   v<-x[i+1,]
   if ((x[i,1]== v[i,1]) & (x[i,2]==v[i,2]) ){
      x[i,3]<-"f"
      fin<-rbind(fin, x[i,])
    }else {fin<-rbind(fin, x[i,]) }
  return(fin)
  }
}
fun(x) 
   X1 X2 X3 X4 X5 X6
1  1  a  f  c  3  d
> 

我想要的结果:

   X1 X2 X3 X4 X5 X6
1  1  a  f  c  3  d
1  1  a  2  c  3  g
1  1  f  4  g  5  h

2 个答案:

答案 0 :(得分:1)

或其他选择:

IA

答案 1 :(得分:0)

您自己的代码的新版本:

fun<-function(x){
  fin<-NULL
  for(i in 1:nrow(x)){
     v<-x[ifelse((i+1)>nrow(x),i,i+1),]
     if ((x[i,1]== v[1,1]) & (x[1,2]==v[1,2]) ){
       x[i,3]<-"f"
       fin<-rbind(fin, x[i,])

    }else {fin<-rbind(fin, x[i,])}
  }
 return(fin)
}
fun(x)