首页 > 解决方案 > if else: else 部分不返回输出

问题描述

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

我以前做过这个,没有任何问题,但我觉得好像我盯着这个太久了,没有任何启发。

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

标签: rfunctionconditional

解决方案


或替代方案:

library(dplyr)
library(magrittr)

> z <- x %>% mutate(match = ifelse(( (lead(X1)==X1) & (lead(X2)==X2)),"YES","NO"))
> z %>% mutate(X3 = replace(X3, match=="YES", "f"))
  X1 X2 X3 X4 X5 X6 match
1  1  a  f  c  3  d   YES
2  1  a  2  c  3  g    NO
3  1  f  4  g  5  h  <NA>

推荐阅读