【问题标题】:use if else statement inside apply function in R在R中的apply函数中使用if else语句
【发布时间】:2018-09-07 05:19:16
【问题描述】:

我有以下两列

lower=rnorm(10,0,1)
upper=rnorm(10,1,1)

dd=data.frame(lower,upper)

我想知道是否对于每一行,lower 1。我使用for循环进行了如下操作,

cc=c()
for(i in 1: 10 ){
  cc[i]= ifelse(  (  dd$upper[i] > 1 && dd$lower[i] < 0.5  ),1,0
  )
}

但我想使用合适的应用功能之一来做到这一点。由于数据在数据框中,我尝试使用 apply 函数。这是我的代码,

apply(dd , 1, function (i,j) {ifelse( (dd$i> 0.5 && dd$j<0.5) ,0,1 )

}
  )

我得到 NA 的。如果有人帮我找出错误真的很有帮助

谢谢

【问题讨论】:

  • 请在生成随机数据之前使用set.seed 并更新您的预期输出。

标签: r if-statement apply


【解决方案1】:

我认为与您尝试过的相比,下面的解决方案要容易得多。看看吧

set.seed(10)
lower=rnorm(10,0,1)
upper=rnorm(10,1,1)

dd=data.frame(lower,upper)

dd$flag<-ifelse((dd$lower < 0.5 & dd$upper > 1),1,0)

这将为您提供所需的输出。

【讨论】:

    【解决方案2】:

    错误在于在apply 中定义函数参数FUN 的输入。将此输入视为完整的数组,而不是数组的单个元素。

    set.seed(10)
    lower <- rnorm(10,0,1)
    upper <- rnorm(10,1,1)
    dd <- data.frame(lower,upper)
    apply(dd, 1, FUN=function(x){ifelse(x[1] < 0.5 && x[2] > 1, 1, 0)})
    [1] 1 1 0 1 1 1 0 0 1 1
    

    或者,你也可以这样做

    apply(dd , 1, FUN = function (x) {ifelse(x["lower"] < 0.5 && x["upper"] > 1, 1, 0)})
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2016-10-13
      • 1970-01-01
      • 2016-11-13
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      相关资源
      最近更新 更多