r中的条件陈述

时间:2014-01-16 20:29:01

标签: r variables if-statement conditional

我正努力在R中编写一个if then语句。我有一个名为diel的变量,我希望这个变量项基于变量的值为“day”或“night”叫hour。我首先在SAS中编写代码,它看起来像这样:

 length diel $5;
 if 7 <= hour < 17 then diel = 'day';
 if 19 <= hour <= 24 then diel = 'night';
 if 0 <= hour < 5 then diel = 'night';
 run;

正如你所看到的那样,黄昏(17-19)和黎明(5-7)的时间被遗漏了。这真的是我在R中遇到的问题,我无法弄清楚如何忽略黄昏和黎明。我写的时候:

dat4$diel <- ifelse ((dat4$hour)< 17, ifelse((dat4$hour) <=7,"day","night"),"night")      

它标记了正确的一天中的小时,但将其他所有内容标记为夜晚。当我尝试任何其他组合时,如添加另一个ifelse语句,如果覆盖第一个语句并将所有小时标记为白天。谢谢你的任何建议!

2 个答案:

答案 0 :(得分:3)

这样的事情可能会:

hour <- 0:24
c('night', NA, 'day', NA, 'night')[findInterval(hour, c(0,5,7,17,19,24), rightmost.closed=TRUE)]
##  [1] "night" "night" "night" "night" "night" NA      NA     
##  [8] "day"   "day"   "day"   "day"   "day"   "day"   "day"  
## [15] "day"   "day"   "day"   NA      NA      "night" "night"
## [22] "night" "night" "night" "night"

答案 1 :(得分:1)

我会这样做:

dat = data.frame(hour =0:24)
transform(dat,diel  =ifelse( hour < 17 & hour >=7 , 'day',
                             ifelse(hour>=19 | hour <5,'night',NA)))

     hour  diel
1     0 night
2     1 night
3     2 night
4     3 night
5     4 night
6     5  <NA>
7     6  <NA>
8     7   day
9     8   day
10    9   day
11   10   day
12   11   day
13   12   day
14   13   day
15   14   day
16   15   day
17   16   day
18   17  <NA>
19   18  <NA>
20   19 night
21   20 night
22   21 night
23   22 night
24   23 night
25   24 night