和和或在R

时间:2017-03-20 15:40:33

标签: r

我用ifelse过滤我的工作结果,我想做的就像下面的那样,

当j等于A或B或C时,k等于第一个,然后是变量15中的rbind。

当j等于D或E,k等于秒时,则在var30中执行rbind。

当j等于F,然后是var45中的rbind。

如何修改我的代码以实现我的需求?

# Below is what I've done. 

  for (j in c("A","B","C","D","E","F")){
    for (k in c("first","second")){

      # do something here.

      ifelse(j== "A" | "B" | "C" & k== "first", var15<-rbind(var1, var2),var15<-rbind(var15,var1, var2))
      ifelse(j== "D" | "E" & k== "second", var30<-rbind(var3,var4,var5),var30<-rbind(var30,var3,var4,var5))
      ifelse(j== "F" , var45<-rbind(var3,var4),var45<-rbind(var45,var3,var4))

      }

    Get_all <- rbind(Get_all ,var15,var30,var45)

    }

1 个答案:

答案 0 :(得分:1)

%in%将使用lhs与rhs匹配。由于lhs的长度在for循环中等于1,因此它将始终评估为长度为1的逻辑。

然后将k与第一个或第二个进行比较。由于lhs和rhs的长度相等,因此在将k与第一个或第二个进行比较时,==将评估为长度为1的逻辑。然后将两个逻辑组合为&&条件。

for (j in c("A","B","C","D","E","F")){
  for (k in c("first","second")){

    # do something here.

    var15 <- ifelse( ( j %in% c( "A", "B", "C") && k == "first"), rbind(var1, var2), rbind(var15, var1, var2))
    var30 <- ifelse( ( j %in% c( "D", "E") && k == "second"), rbind(var3, var4, var5), rbind(var30, var3, var4, var5))
    var45 <- ifelse( j == "F" , rbind( var3, var4), rbind(var45, var3, var4))

  }

  Get_all <- do.call( 'rbind', list( var15,var30,var45))

}