【问题标题】:ifelse in R: alternatives to nestingR 中的 ifelse:嵌套的替代方法
【发布时间】:2016-01-13 13:12:27
【问题描述】:

我编写了一系列 ifelse 语句,它们在数据框中创建了一个新列。示例:

rf$rs.X<- ifelse(rf$chl==0 & rf$dm=="y" & rf$gdr=="m" & rf$smk=="n" & rf$age>=70 & rf$sbp>=160, ">=40%", NA)

当我运行其他 ifelse 语句时,它们会覆盖前一个语句,因为我将它映射到数据框中的同一新列(即,我所有的 ifelse 语句都以相同的 rf$rs.X 开头)。

我知道我可以为每个语句指定一个要创建的新列,但我有 68 个 ifelse 语句,我不想​​为每个语句创建一个新列:我想要一个新列。

为了解决这个问题,我尝试嵌套所有 68 个 ifelse 语句,但它似乎不起作用(当我尝试运行它时,我得到一个蓝色加号 (+))。在这里阅读后,嵌套似乎有限制(n = 50)。

那么,对于一系列 ifelse 语句,我怎样才能将所有输出都放到数据框中的同一列中,而 ifelse 语句不会覆盖前一个?

谢谢!

【问题讨论】:

  • 查找表不是更简单吗?
  • 是的,抱歉,这是一个换位错误。在实际代码中我有rf$chl==0
  • 你能给个reproducible example吗?
  • 一些灵感:onetwo
  • 如何使用else if 语句和apply 将函数写入数据中的每一行

标签: r if-statement


【解决方案1】:

我会这样写:

rf$rs.X<- with( rf, ifelse(chl==0 & dm=="y" & gdr=="m" &
                           smk=="n" & age>=70 & sbp>=160,    ">=40%", NA)

然后下一个(比如对于低 sbp 的情况,可以使用 rs.X 值作为替代:

rf$rs.X<- with( rf, ifelse(chl==0 & dm=="y" & gdr=="m" &
                           smk=="n" & age>=70 & sbp < 160,    "30-39%", rs.X)

这样,不符合条件的行的值就不会被覆盖。

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多