【问题标题】:R if statement loop applied the first element onlyR if 语句循环仅应用第一个元素
【发布时间】:2016-04-09 10:45:55
【问题描述】:

我有一个名为 x 的 DF,其中包含 2 个变量 hour 和 timeofday。

我确实需要根据以下规则为 timeofday 变量提供 4 个不同的值:

if (x$hour>=0 & x$hour<6){x$timeofday<-"midnight"} else
  if(x$hour>=6 & x$hour<12) {x$timeofday<-"morning"} else
    if (x$hour>=12 & x$hour<18) {x$timeofday<-"afternoon"} else
    {x$timeofday<-"night"}

很遗憾,只有第一条规则“午夜”适用于所有条件。

   timeofday hour
1   midnight    0
2   midnight    1
3   midnight    2
4   midnight    3
5   midnight    4
6   midnight    5
7   midnight    6
8   midnight    7
9   midnight    8
10  midnight    9
11  midnight   10
12  midnight   11
13  midnight   12
14  midnight   13
15  midnight   14
16  midnight   15
17  midnight   16
18  midnight   17
19  midnight   18
20  midnight   19
21  midnight   20
22  midnight   21
23  midnight   22
24  midnight   23
25  midnight    0
26  midnight    1
27  midnight    2
28  midnight    3
29  midnight    4
30  midnight    6

非常感谢您的支持,谢谢

【问题讨论】:

  • 试试ifelse()它是矢量化的。
  • @mtoto :我试过 ifelse() 然后我只应用了最后一条规则,即“晚上” ifelse(x$hour>=0 & x$hour=6 & x$hour=12 & x$hour
  • 您的通话中有错字,请参阅正确语法的解决方案。
  • 我想你想看看?cut - cut(0:23, breaks=c(0,6,12,18,24), include.lowest=TRUE, labels=c("midn","morn","after","night")

标签: r if-statement


【解决方案1】:

正如mtoto 所指出的那样,ifelse 是矢量化的,而if 不是。所以这将是你的解决方案:

x$timeofday<-ifelse(x$hour>=0 & x$hour<6,"midnight",
       ifelse(x$hour>=6 & x$hour<12,"morning",
              ifelse(x$hour>=12 & x$hour<18,"afternoon","night")))

【讨论】:

  • 请注意,您不一定需要使用 ifelse。你可以简单地写:x$timeofday[x$hour&gt;=0 &amp; x$hour&lt;6] &lt;-"midnight"x$timeofday[x$hour&gt;=6 &amp; x$hour&lt;12] &lt;-"morning"等等……
  • 另外,真正的一点是if-statement 用于control flow,这意味着 if 语句中的代码部分仅在条件为真时才被评估(逻辑的第一个值向量,如果传递了一个条件向量,如本例所示),否则评估else中的代码部分。
  • 是的,实际上ifelse 在这种情况下可能不是进行元素分配的更好方法。但当他在寻求一种方法来纠正这种说法时,这就是解决方案
  • @adiana:这里肯定没有错;)我更担心的是 ifelse 函数经常被混淆为 if 语句的替换,反之亦然......但它们的作用不同东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多