【问题标题】:Repeating ifelse statement on row in dataframe or using ifelse-statement on a vector with multible factors在数据框中的行上重复 ifelse 语句或在具有多个因子的向量上使用 ifelse 语句
【发布时间】:2015-10-03 02:00:24
【问题描述】:

希望有人可以在 R 中帮助解决这个问题。

我有一个数据集(df),有点简化,看起来像这样

 Resp Status    Threshold
  1      16        3
  0      134       4
  1      3.5       3

我想对每一行执行这个 ifelse-test

CR.Wat = ifelse(Threshold != "NA" && Status != "NA", 
                ifelse(Resp != 1, Threshold/Status, Status/Threshold), 
                "")

我希望获得三个阈值/状态值。但相反,我只得到一个值。

我想我应该以某种方式告诉他们我希望每一行都有它。

我尝试使用这个公式来做到这一点

CR.Wat = ifelse(c(Threshold) != "NA" && c(Status) != "NA",
                ifelse(c(Resp) != 1, c(Threshold/Status), c(Status/Threshold)), 
                "")

但这并没有影响任何事情。

【问题讨论】:

  • 只使用一个&with(df, ifelse(Treshold!="NA" & Status!="NA",ifelse(Resp!=1,Treshold/Status,Status/Treshold),"")) 另外,顺便说一句,为了检查NA,它是is.na(Status)。我假设你有“性格”的 NAs

标签: r loops if-statement vector


【解决方案1】:

您的操作只返回一个值,因为您使用了&& 而不是&。您可以在?"&" 了解这两个运算符之间的区别。

话虽如此,您可以在不使用嵌套 ifelse 的情况下完成您的操作,方法是在 Resp != 1 时注意您想要阈值/状态(又名 (Threshold/Status)^1)和当 Resp 时需要状态/阈值(又名 (Threshold/Status)^(-1)) == 1。

with(dat, (Treshold / Status)^(1-2*(Resp == 1)))
# [1] 5.33333333 0.02985075 1.16666667

【讨论】:

  • 非常感谢!效果很好!你有一个网站的链接,我可以在其中阅读“with”的内容吗?因为即使它有效,我也不知道它是如何工作的
  • 你也有解决这个问题的办法吗? stackoverflow.com/questions/31401206/…
  • @EmilieK 基本上这意味着您无需继续输入dat$var 即可从数据框dat 访问变量var。您可能已经将表达式写为(dat$Treshold / dat$Status)^(1-2*(dat$Resp == 1))
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 2017-10-15
  • 2019-08-03
相关资源
最近更新 更多