【问题标题】:And and or in R [duplicate]And and or in R [重复]
【发布时间】:2017-03-20 15:40:33
【问题描述】:

我使用 ifelse 过滤我的工作结果,我想做的如下所示,

当 j 等于 A 或 B 或 C,并且 k 等于 first 时,然后在 var15 中进行 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)

    }

【问题讨论】:

  • 一个集合中的成员资格被测试为j %in% c("A","B")。此外,您可能应该使用var15 &lt;- if (cond) x else y。此外,您不应该在 R 中循环发展事物(谷歌搜索将导致资源解释原因)。
  • 必须是j %in% c("A", "B", "C")j == "A" | j == "B" | j == "C"

标签: r


【解决方案1】:

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

然后将 k 与 first 或 second 进行比较。由于 lhs 和 rhs 的长度相等,即为一,因此在将 k 与 first 或 second 进行比较时,== 将评估为长度为 1 的逻辑。然后将这两个逻辑与&amp;&amp; 条件结合起来。

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))

}

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 2012-10-10
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2012-10-15
    相关资源
    最近更新 更多